pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/controller/data/UploaderController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/helper/WebHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/lf/server/service/data/UploaderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -173,12 +173,12 @@ <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> <version>2.11.0</version> </dependency> <!--GDAL--> <dependency> src/main/java/com/lf/server/controller/data/UploaderController.java
@@ -30,9 +30,9 @@ @PostMapping({"/uploadData"}) public ResponseMsg<Object> uploadData(HttpServletRequest req, HttpServletResponse res) { try { uploaderService.uploadData(req, res); Object obj = uploaderService.uploadData(req, res); return success(""); return success(obj); } catch (Exception ex) { return fail(ex.getMessage(), null); } src/main/java/com/lf/server/helper/WebHelper.java
@@ -5,6 +5,7 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.ServletContext; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,9 +34,6 @@ /** * 获取用户ip * * @param request * @return */ public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); @@ -88,9 +86,6 @@ /** * 获取当前时间指定分钟数后的Timestamp * * @param min 分钟数 * @return */ public static Timestamp getTimestamp(int min) { Calendar now = Calendar.getInstance(); @@ -101,9 +96,6 @@ /** * 从Cookie中获取token * * @param request * @return */ public static String getTokenFromCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); @@ -125,10 +117,6 @@ /** * 向Cookie中添加token * * @param token * @param request * @param response */ public static void saveToken2Cookie(String token, HttpServletRequest request, HttpServletResponse response) { // 先删除 @@ -140,10 +128,6 @@ /** * 保存Cookie * * @param key * @param value * @param response */ public static void saveCookie(String key, String value, HttpServletResponse response) { Cookie cookie = new Cookie(key, value); @@ -159,9 +143,6 @@ /** * 删除cookie中的值 * * @param cookieKey * @param request */ public static void deleteCookie(String cookieKey, HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); @@ -178,9 +159,6 @@ /** * 删除所有Cookie * * @param request * @param response */ public static void deleteCookies(HttpServletRequest request, HttpServletResponse response) { Cookie[] cookies = request.getCookies(); @@ -213,9 +191,6 @@ /** * 获取Token * * @param request * @return */ public static String getToken(HttpServletRequest request) { // 1.从url参数中,获取token @@ -236,8 +211,6 @@ /** * 获取Request * * @return */ public static HttpServletRequest getRequest() { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); @@ -247,8 +220,6 @@ /** * 获取Response * * @return */ public static HttpServletResponse getResponse() { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); @@ -258,19 +229,23 @@ /** * 获取Session * * @return */ public static HttpSession getSession() { return getRequest().getSession(); } /** * 获取真实路径 */ public static String getRealPath(String path) { HttpServletRequest req = getRequest(); ServletContext ctx = req.getSession().getServletContext(); return ctx.getRealPath("/" + path); } /** * 输出json数据到前端 * * @param response * @param jsonPack * @throws Exception */ public static boolean write2Page(HttpServletResponse response, String jsonPack) throws IOException { response.setContentType("application/json;charset=UTF-8"); src/main/java/com/lf/server/service/data/UploaderService.java
@@ -23,8 +23,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -45,12 +45,6 @@ @Autowired AttachService attachService; private final static long ONE_DAY = 24 * 60 * 60 * 1000; private final static long SIZE_MAX = 1024 * 1024 * 1024 * 1024; private final static long FILE_SIZE_MAX = 256 * 1024 * 1024 * 1024; private final static Log log = LogFactory.getLog(UploaderService.class); @@ -179,41 +173,92 @@ /** * 上传文件 */ public void uploadData(HttpServletRequest req, HttpServletResponse res) { try { // 处理中文乱码问题 req.setCharacterEncoding("utf-8"); res.setContentType("text/html;charset=utf-8"); public Object uploadData(HttpServletRequest request, HttpServletResponse res) throws Exception { StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request; req.setCharacterEncoding("utf-8"); res.setContentType("application/json;charset=utf-8"); // 检查请求是/否为multipart/form-data类型 if (!ServletFileUpload.isMultipartContent(req)) { throw new RuntimeException("表单的enctype属性不是multipart/form-data类型"); Map<String, String> map = getParams(req); List<FileInfo> list = getFiles(req); return list.size(); } private Map<String, String> getParams(StandardMultipartHttpServletRequest req) { Map<String, String> map = new HashMap<String, String>(3); Enumeration<String> enumeration = req.getParameterNames(); while (enumeration.hasMoreElements()) { String key = enumeration.nextElement(); String value = req.getParameter(key); map.put(key, value); } return map; } private List<FileInfo> getFiles(StandardMultipartHttpServletRequest req) throws Exception { List<FileInfo> list = new ArrayList<FileInfo>(); String path = pathHelper.getTempPath(); Iterator<String> iterator = req.getFileNames(); while (iterator.hasNext()) { MultipartFile file = req.getFile(iterator.next()); FileInfo fi = new FileInfo(file.getOriginalFilename()); if (StringHelper.isEmpty(fi.getFileName())) { continue; } // 创建上传所需要的两个对象:磁盘文件对象+文件上传对象 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(factory); ServletRequestContext ctx = new ServletRequestContext(req); fi.setSize(file.getSize()); fi.setPath(path + File.separator + fi.getFileName()); file.transferTo(new File(fi.getPath())); // 限制上传的总文件大小 sfu.setSizeMax(SIZE_MAX); // 限制单个文件的大小 sfu.setFileSizeMax(FILE_SIZE_MAX); // 设置编码方式 sfu.setHeaderEncoding("utf-8"); // list容器用来保存表单中的所有数据信息 List<FileItem> items = sfu.parseRequest(ctx); copeFileItems(items, req); } catch (Exception ex) { log.error(ex.getMessage() + ex.getStackTrace() + "\n"); list.add(fi); } return list; } public Object fileUpload(HttpServletRequest req, HttpServletResponse res) throws Exception { List<FileItem> items = getFileItem(req, res); return copeFileItems(items, req); } /** * 获取文件项 */ private List<FileItem> getFileItem(HttpServletRequest req, HttpServletResponse res) throws Exception { // 处理中文乱码问题 req.setCharacterEncoding("utf-8"); // text/html;charset=utf-8 res.setContentType("application/json;charset=utf-8"); // 检查请求是/否为multipart/form-data类型 if (!ServletFileUpload.isMultipartContent(req)) { throw new RuntimeException("表单的enctype属性不是multipart/form-data类型"); } // 创建上传所需要的两个对象:磁盘文件对象+文件上传对象 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(factory); ServletRequestContext ctx = new ServletRequestContext(req); // 设置编码方式 sfu.setHeaderEncoding("utf-8"); factory.setSizeThreshold(4096); // 获取表单中的所有数据信息 List<FileItem> list = sfu.parseRequest(ctx); return list; } /** * 处理解析内容:处理普通表单域和文件表单域 */ private void copeFileItems(List<FileItem> items, HttpServletRequest req) throws Exception { private Object copeFileItems(List<FileItem> items, HttpServletRequest req) throws Exception { Map<String, String> map = new HashMap<String, String>(3); List<FileInfo> list = new ArrayList<FileInfo>(); @@ -231,6 +276,8 @@ list.add(fi); } } return map; } /** @@ -252,35 +299,6 @@ } catch (Exception ex) { log.error(ex.getMessage() + ex.getStackTrace() + "\n"); return null; } } private void handleFileField(FileItem item, HttpServletRequest req) { // 获取 文件数据项中的 文件名 String fileName = item.getName(); // 控制只能上传图片 String img = "image"; if (!item.getContentType().startsWith(img)) { return; } // 获取 当前项目下的 /files 目录的绝对位置 ServletContext ctx = req.getSession().getServletContext(); String path = ctx.getRealPath("/files"); // 创建 file对象 File file = new File(path); if (!file.exists()) { // 创建目录 file.mkdir(); } // 将文件保存到服务器上(UUID是通用唯一标识码) try { item.write(new File(file.toString(), UUID.randomUUID() + "_" + fileName)); } catch (Exception e) { e.printStackTrace(); } } } src/main/resources/application.yml
@@ -24,6 +24,12 @@ # session session: timeout: PT20M # 20分钟 # 设置上传文件大小 servlet: multipart: enabled: true max-file-size: 204800MB max-request-size: 1048576MB # jackson jackson: time-zone: GMT+8