1.mvc-servlet 和 pom.xml
<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean>
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency>
2.JSP
<form id="merSave" name="merSave" method="post" action="${ctx }/mer/merSave" enctype="multipart/form-data"> <td class="td_right">上传附件:</td> <td> <input name="attachment" id="attachment" class="easyui-filebox" style="height:30px" data-options="onChange:function() {$(this).val($(this).filebox('getValue'))},prompt:'上传营业执照图片(支持jpg、png格式)...',buttonText: '选择图片', accept: '*.jpg, *.png'" size="40" value="${merchant.attachment_old_name }"> (建议在5M以下) </td> </form>
3.JS
$(function() { $("#merSave").validate({ rules: { /*, attachment:{ required: true, filetype:["jpg","png"] }*/, }, messages: { /*, attachment:{ filetype: messagesFomat( "只能上传jpg、png图片") }*/ }, submitHandler: function(form) { // 商户附件,企业商户必填 var attachment = $("#attachment").val(); if(mer_target=="-1" || mer_target=="0"){ if(attachment==null || attachment==""){ $.messager.alert("提示", "企业商户上传附件不能为空!", "error"); return; } } if(attachment!=null&&attachment!=""){ var file_name_index = attachment.lastIndexOf("."); var file_name_suffix = attachment.substr(file_name_index).toLowerCase(); if(file_name_suffix==".jpg"||file_name_suffix==".png"){ }else{ $.messager.alert("提示", "附件格式为jpg、png!", "error"); return ; } } $.messager.confirm("提示", "是否确认保存该信息?", function(r) { if (r) { load(); $(form).ajaxSubmit(function(data) { disLoad(); if (data.flag == 0) { $.messager.alert("提示", "保存成功!", "info", function() { var url = ctx()+"/mer/merQuery"; location.href = url; }); } else { $.messager.alert("提示", data.errorMessage, "error"); } }); } }); } }); });
4.MultipartFileUtils
package com.cxy.utils; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FileUtils; import org.springframework.web.multipart.MultipartFile; import com.app.biz.controller.BaseController; public class MultipartFileUtils { public static final String FILESAVEPATH1="C:\\fileSource\\gameIco";//游戏图标保存路径 public static final String FILESAVEPATH2="C:\\fileSource\\gameImg";//游戏海报保存地址 public static final String FILESAVEPATH3="C:\\fileSource\\gamApk";//游戏文件保存路径 public static final String MUSICSAVEPATH1="C:\\fileSource\\musicImg";//音乐海报保存路径 public static final String MUSICSAVEPATH2="/uploadFile/musicFilePath";//音乐文件保存地址 public static final String BOOKSAVEPATH1="C:\\fileSource\\bookImg";//图书海报保存路径 public static final String BOOKSAVEPATH2="/uploadFile/bookFilePath";//图书文件保存地址 public static Map<String, Object> saveToTomcat(HttpServletRequest request, MultipartFile attachment, String PRODUCT_IMG_SAVE_PATH) { String parentPath = request.getSession().getServletContext() .getRealPath(java.io.File.separator);// tomcat的webapp前缀 String originalFilename = attachment.getOriginalFilename();// 图片原名.png String fileNameSuffix = originalFilename.substring(originalFilename .lastIndexOf("."));// .png SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String fileName = BaseController.uuid()+fileNameSuffix;// 新的图片名称.png Map<String, Object> saveResult = MultipartFileUtils.saveFileToDisk( parentPath, PRODUCT_IMG_SAVE_PATH, fileName, attachment, 800 * 1024 * 1024L,request); if (!"0".equals(saveResult.get("status").toString())) { // 保存失败 return BaseController.outData("0001", saveResult.get("msg") .toString(), null); } String save_path = (String) saveResult.get("save_path");// 保存的路径名 saveResult.get("old_name");// 上传时的文件名 QQ图片20161226133411.png} return BaseController.outData("0000", save_path, null); } public static Map<String, Object> saveToDisk(HttpServletRequest request, MultipartFile attachment, String PRODUCT_IMG_SAVE_PATH) { String originalFilename = attachment.getOriginalFilename();// 图片原名.png String fileNameSuffix = originalFilename.substring(originalFilename .lastIndexOf("."));// .png String fileName = BaseController.uuid()+fileNameSuffix;// 新的图片名称.png Map<String, Object> saveResult = MultipartFileUtils.saveFileToDisk( "", PRODUCT_IMG_SAVE_PATH, fileName, attachment, 800 * 1024 * 1024L,request); if (!"0".equals(saveResult.get("status").toString())) { // 保存失败 return BaseController.outData("0001", saveResult.get("msg") .toString(), null); } String save_path = (String) saveResult.get("save_path");// 保存的路径名 saveResult.get("old_name");// 上传时的文件名 QQ图片20161226133411.png} return BaseController.outData("0000", save_path, null); } /** * @param request * @param fileUrl 删除的文件路径 * @throws IOException */ public static void deleteOld(HttpServletRequest request, String fileUrl) throws IOException { // String parentPath = request.getSession().getServletContext() // .getRealPath(File.separator); String url = fileUrl; File file = new File(url); if(!file.isDirectory()){ if (file.exists()) { file.delete(); } }else {//是文件夹则删除路径下的所有文件夹 FileUtils.deleteDirectory(file); } } /** * 保存文件到磁盘 */ private static Map<String, Object> saveFileToDisk(String parentPath, String PRODUCT_IMG_SAVE_PATH, String fileName, MultipartFile file, long maxSize,HttpServletRequest request) { Map<String, Object> result = new HashMap<String, Object>(); if (file == null || file.isEmpty() || file.getSize() <= 0) { result.put("status", "1"); result.put("msg", "文件为空"); return result; } // 检查文件大小,800M if (file.getSize() > maxSize) { result.put("status", "1"); result.put("msg", "文件过大"); return result; } try { int endIndex = 0; // String parentPathUrl = parentPath.getPath(); // endIndex = parentPathUrl.indexOf(BaseController.getProjectName(request)); // System.out.println(parentPathUrl.substring(0, endIndex)); // String savePath = parentPathUrl.substring(0, endIndex); String filePath = parentPath+ PRODUCT_IMG_SAVE_PATH + "/" + fileName;// D:\workspace\sms_boss\src\main\webapp\\sms_check_file\passway\sign_20170302062136381.png System.out.println(filePath); File saveDir = new File(filePath); if (saveDir.isFile() && saveDir.exists()) { result.put("status", "1"); result.put("msg", "文件名重复"); return result; } if (!saveDir.getParentFile().exists()) { saveDir.getParentFile().mkdirs(); } System.out.println("save path ... : " + saveDir.getPath()); // 转存文件 file.transferTo(saveDir); System.out.println("save file success : " + saveDir.getPath()); result.put("status", "0"); result.put("save_path", PRODUCT_IMG_SAVE_PATH + "/" + fileName);// 保存的路径名 // \sms_check_file\passway\sign_20170302063551308.png result.put("old_name", file.getOriginalFilename());// 上传时的文件名 // QQ图片20161226133411.png return result; } catch (Exception e) { e.printStackTrace(); result.put("status", "1"); result.put("msg", "保存失败"); return result; } } }
5.BaseController
package com.app.biz.controller; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.ehcache.CacheManager; import org.springframework.beans.factory.annotation.Autowired; /** * 提供获取request,session,转换json等常用方法 * * @author dj * */ public class BaseController { // header 常量定义 private static final String DEFAULT_ENCODING = "utf-8"; private static final boolean DEFAULT_NOCACHE = true; // Content Type 常量定义 public static final String TEXT_TYPE = "text/plain"; public static final String JSON_TYPE = "application/json"; public static final String XML_TYPE = "text/xml"; public static final String HTML_TYPE = "text/html"; public static final String JS_TYPE = "text/javascript"; public static final String EXCEL_TYPE = "application/vnd.ms-excel"; public static int PAGE_NUMERIC = 20; /** * 直接输出内容的简便函数. */ public static void render(final String contentType, final String content, final HttpServletResponse response) { HttpServletResponse resp = initResponseHeader(contentType, response); try { resp.getWriter().write(content); resp.getWriter().flush(); } catch (Exception e) { e.printStackTrace(); } } /** * 直接输出文本. */ protected void outText(final String text, final HttpServletResponse response) { render(TEXT_TYPE, text, response); } /** * 直接输出HTML. */ protected void outHtml(final String html, final HttpServletResponse response) { render(HTML_TYPE, html, response); } /** * 直接输出XML. */ protected void outXml(final String xml, final HttpServletResponse response) { render(XML_TYPE, xml, response); } /** * 输出JSON,可以接收参数如: [{'name':'www'},{'name':'www'}],['a','b'],new * String[]{'a','b'},合并如下:jsonString = "{TOTALCOUNT:" + totalCount + ", * ROOT:" + jsonString + "}"; * * @param jsonString * json字符串. * */ public static void outJson(final String json, final HttpServletResponse response) { render(JSON_TYPE, json, response); } /** * 设置让浏览器弹出下载对话框的Header. * * @param fileName * 下载后的文件名. */ protected void setFileDownloadHeader(HttpServletResponse response, String fileName) { try { // 中文文件名支持 String encodedfileName = new String(fileName.getBytes(), "ISO8859-1"); response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\""); } catch (Exception e) { e.printStackTrace(); } } /** * 分析并设置contentType与headers. */ protected static HttpServletResponse initResponseHeader(final String contentType, final HttpServletResponse response) { // 分析headers参数 String encoding = DEFAULT_ENCODING; boolean noCache = DEFAULT_NOCACHE; // 设置headers参数 String fullContentType = contentType + ";charset=" + encoding; response.setContentType(fullContentType); if (noCache) { setNoCacheHeader(response); } return response; } /** * 设置客户端无缓存Header. */ protected static void setNoCacheHeader(HttpServletResponse response) { // Http 1.0 header response.setDateHeader("Expires", 0); response.addHeader("Pragma", "no-cache"); // Http 1.1 header response.setHeader("Cache-Control", "no-cache"); } /* protected void outJsonMap(int flag, String errorMessage, HttpServletResponse response){ Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("flag", flag); jsonMap.put("errorMessage", errorMessage); String json = JSONObject.fromObject(jsonMap).toString(); outJson(json, response); }*/ public static Map<String, Object> outData(String code,String message,Object object){ Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("code", code); jsonMap.put("msg", message); jsonMap.put("data", object); return jsonMap; } //java中遍历实体类,获取属性名和属性值 public static Map<String, Object> testReflect(Object model) throws Exception{ Map<String, Object> map=new HashMap<String, Object>(); for (Field field : model.getClass().getDeclaredFields()) { field.setAccessible(true); map.put(field.getName(), field.get(model)); /*System.out.println(field.getName() + ":" + field.get(model) );*/ } return map; } /** * 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割. */ public static String uuid() { return UUID.randomUUID().toString().replaceAll("-", ""); } /** tomcat的webapp前缀 * @param request * @return */ public static String getTomcatPath(HttpServletRequest request){ String parentPath = request.getSession().getServletContext() .getRealPath(java.io.File.separator); return parentPath; } }
6.controller
@RequestMapping(value="/insertOrUpdate") @ResponseBody public int insertOrUpdate(BizBookMsg msg,HttpServletRequest request, @RequestParam(value = "bookImg", required = false) MultipartFile bookImg) throws Exception{ int i =0; i = bookMsgSer.insertOrUpdate(msg,request,bookImg); return i; }