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