| package com.matrix.system.common.actions; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.matrix.core.tools.StringUtils; | 
| import com.matrix.core.tools.UUIDUtil; | 
| import com.matrix.system.common.constance.AppConstance; | 
| import org.apache.commons.fileupload.FileUploadException; | 
| import org.apache.log4j.Logger; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.stereotype.Controller; | 
| import org.springframework.util.FileCopyUtils; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.ResponseBody; | 
| import org.springframework.web.multipart.MultipartFile; | 
| import org.springframework.web.multipart.MultipartHttpServletRequest; | 
|   | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.File; | 
| import java.io.IOException; | 
| import java.text.SimpleDateFormat; | 
| import java.util.Date; | 
| import java.util.Map; | 
| import java.util.regex.Matcher; | 
| import java.util.regex.Pattern; | 
|   | 
| /** | 
|  * 多文件上传控制器 | 
|  *  | 
|  * @author jiangyouyao | 
|  * @email 512061637@qq.com | 
|  * @date 2019年2月25日 | 
|  */ | 
| @Controller | 
| @RequestMapping(value = "admin/multipleUploadFile") | 
| public class MultipleFileUploadAction { | 
|     Logger log = Logger.getLogger(MultipleFileUploadAction.class); | 
|   | 
|     @Value("${file_storage_path}") | 
|     private String fileStoragePath; | 
|     @Value("${static_resource_url}") | 
|     private String nginxUrl; | 
|   | 
|     /** | 
|      * 最大值 | 
|      */ | 
|     private Long maxSize = 1024*1024*100L; | 
|   | 
|     /** | 
|      * 多文件上传方法 | 
|      *  | 
|      * @author jiangyouyao | 
|      * @email 512061637@qq.com | 
|      * @date 2019年2月25日 | 
|      * @param response | 
|      * @param request | 
|      * @return | 
|      * @throws IOException | 
|      * @throws FileUploadException | 
|      */ | 
|     @RequestMapping(value = "/doUpload") | 
|     public @ResponseBody JSONObject doFileUpload(HttpServletResponse response, MultipartHttpServletRequest request, Integer data) | 
|             throws IOException, FileUploadException { | 
|         // 文件保存目录路径 | 
|         String savePath = fileStoragePath; | 
|         // 文件保存目录URL | 
|         String saveUrl = nginxUrl; | 
|         // String msgPag = "common/fileUploadResult"; | 
|         JSONObject object = new JSONObject(); | 
|         response.setContentType("text/html; charset=UTF-8"); | 
|         request.setCharacterEncoding("UTF-8"); | 
|   | 
|         // 保存和访问路径检查 | 
|         if (StringUtils.isBlank(saveUrl) || StringUtils.isBlank(savePath)) { | 
|             object.put("status", "err"); | 
|             object.put("msg", "文件上传失败错误代码:001"); | 
|             return object; | 
|         } | 
|         // 检查目录 | 
|         File uploadDir = new File(savePath); | 
|         if (!uploadDir.isDirectory()) { | 
|             uploadDir.mkdir(); | 
|         } | 
|         // 检查目录写权限 | 
| //        if (!uploadDir.canWrite()) { | 
| //            object.put("status", "err"); | 
| //            object.put("msg", "上传目录没有写权限"); | 
| //            return object; | 
| //        } | 
|   | 
|         Map<String, MultipartFile> fileMaps = request.getFileMap(); | 
|         for (String key : fileMaps.keySet()) { | 
|             MultipartFile file = fileMaps.get(key); | 
|   | 
|             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); | 
|             String ymd = sdf.format(new Date()); | 
|             savePath += ymd + "/"; | 
|             saveUrl += ymd + "/"; | 
|             File dirFile = new File(savePath); | 
|             if (!dirFile.exists()) { | 
|                 dirFile.mkdirs(); | 
|             } | 
|             log.info("上传文件名:" + file.getOriginalFilename()); | 
|             log.info("上传文件大小:" + file.getBytes().length); | 
|             log.info("上传文件大小限制:" + maxSize); | 
|             log.info("上传文件大小是否超过限制:" + (file.getBytes().length > maxSize)); | 
|             if (file.getBytes().length > maxSize) { | 
|                 object.put("status", "err"); | 
|                 object.put("msg", "上传文件大小超过限制"); | 
|                 return object; | 
|             } | 
|             String fileName = file.getOriginalFilename(); | 
|             String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); | 
|   | 
|             fileName = fileName.replace("." + fileExt, ""); | 
|             fileName = getSensitive(fileName); | 
|             String newFileName = UUIDUtil.getRandomID() + UUIDUtil.getRandomID() + "." + fileExt; | 
|             File uploadedFile = new File(savePath, newFileName); | 
|             try { | 
|                 FileCopyUtils.copy(file.getBytes(), uploadedFile); | 
|             } catch (Exception e) { | 
|                 object.put("status", "err"); | 
|                 object.put("msg", "上传文件失败 "+e.getMessage()); | 
|                 return object; | 
|             } | 
|             log.info("saveUrl:" + saveUrl); | 
|             String visitPath = saveUrl + newFileName; | 
|             log.info("上传一个文件:" + newFileName); | 
|             log.info("访问路径:" + visitPath); | 
|             // 获取回调函数 | 
|             /* | 
|              * String callBack = request.getParameter("callBack"); String inputId = | 
|              * request.getParameter("inputId"); request.setAttribute("status", "200"); | 
|              * request.setAttribute("callBack", callBack); request.setAttribute("inputId", | 
|              * inputId); request.setAttribute("url", visitPath); | 
|              */ | 
|             object.put("path", visitPath); | 
|             object.put("fileName", fileName); | 
|             object.put("status", 200); | 
|             if (data != null) { | 
|                 object.put("index", data); | 
|             } | 
|         } | 
|         return object; | 
|     } | 
|   | 
|     /** | 
|      * 检查文件名,过滤特殊字符 | 
|      *  | 
|      * @author jiangyouyao | 
|      * @email 512061637@qq.com | 
|      * @date 2019年2月25日 | 
|      * @param globWords | 
|      * @return | 
|      */ | 
|     public String getSensitive(String globWords) { | 
|   | 
|         String sensitive = ""; | 
|         Pattern pattern = Pattern.compile(AppConstance.SPECIAL_CHARACTERS); | 
|         Matcher matcher = pattern.matcher(globWords); | 
|         while (matcher.find()) { | 
|             sensitive += matcher.group(); | 
|         } | 
|         /* | 
|          * if(sensitive=="" || sensitive.length()<3 ){ | 
|          * sensitive=StringUtils.getRandomString(8); } | 
|          */ | 
|         return sensitive; | 
|     } | 
| } |