From f1a565cbcbb1ab672fdbc57953ce6d8298a159fe Mon Sep 17 00:00:00 2001 From: jyy <935090232@qq.com> Date: Mon, 12 Apr 2021 19:29:29 +0800 Subject: [PATCH] 修复bug9 --- zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 169 insertions(+), 0 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java b/zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java new file mode 100644 index 0000000..9c4f419 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/common/actions/MultipleFileUploadAction.java @@ -0,0 +1,169 @@ +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; + } +} \ No newline at end of file -- Gitblit v1.9.1