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 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; } }