SpringBoot2X实现文件上传三

使用 SpringBoot 项目完成单个、多个文件的上传处理,并将上传的文件保存到指定目录下。代码演示案例所有的 HTML 页面文件index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>选择上传文件类型</title></head><script language="javascript"> function single() { document.form1.action = "/singlefile"; document.form1.submit(); } function multi() { document.form1.action = "/multifile"; document.form1.submit(); }</script><body><form name="form1" method="post"> <input type="button" name="btn1" value="单个文件上传" onclick="single();"> <input type="button" name="btn2" value="多个文件上传" onclick="multi();"></form></body></html>multifile.html<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"/> <title>多文件上传</title></head><body><h1 th:inlines="text">多文件上传</h1><form action="/multiFileUpload" method="post" enctype="multipart/form-data"> <p>选择文件1: <input type="file" name="fileName"/></p> <p>选择文件2: <input type="file" name="fileName"/></p> <p>选择文件3: <input type="file" name="fileName"/></p> <p><input type="submit" value="提交"/></p></form></body></html>singlefile.html<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"/> <title>单文件上传</title></head><body><h1 th:inlines="text">单文件上传</h1><form action="/singleFile" method="post" enctype="multipart/form-data"> <p>文件:<input type="file" name="head_img"/></p> <p><input type="submit" value="上传"/></p></form></body></html>逻辑代码定义结果集@Getter@Setter@ToStringpublic class Result implements Serializable { private boolean flag; //是否成功 private Integer code; //返回码 private String message;//返回信息 public Result(boolean flag, Integer code, String message) { this.flag = flag; this.code = code; this.message = message; }}定义错误码public class StatusCode { public static final int OK = 2000; //成功 public static final int ERROR = 4000; //失败}逻辑代码@Controller@Slf4jpublic class FileController { @Value("${file.path}") private String filePath; // 获取 singlefile.html 页面 @RequestMapping(value = "/singlefile", method = RequestMethod.POST) public String single() { return "singlefile"; } // 单文件上传 @RequestMapping(value = "singleFile") @ResponseBody public Result uploadFile(@RequestParam("head_img") MultipartFile file, HttpServletRequest request) { if (file.isEmpty()) { return new Result(false, StatusCode.ERROR, "上传的文件大小为空,请检查!!"); } //获取文件名称、后缀名、大小 String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); long size = file.getSize(); log.info("上传的文件名称为:[{}],文件后缀为:[{}],文件大小为:[{}]!!", fileName, suffixName, size); // 存储转换后文件名称 fileName = UUID.randomUUID() + suffixName; log.info("转换后的文件名为:[{}]!!", fileName); File dest = new File(filePath + fileName); //判断父目录是否存在 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } try { file.transferTo(dest); return new Result(true, StatusCode.OK, "上传成功!!"); } catch (IOException e) { log.error("上传文件过程中发生异常!", e); } return new Result(true, StatusCode.ERROR, "上传失败!!"); } // 获取 multifile.html 页面 @RequestMapping("/multifile") public String multi() { return "multifile"; } // 多文件上传 @PostMapping(value = "multiFileUpload") @ResponseBody public Result multiFileUpload(HttpServletRequest request) { List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("fileName"); for (MultipartFile file : files) { if (file.isEmpty()) { return new Result(false, StatusCode.ERROR, "上传多个文件时,某个文件大小为空,请检查!!"); } else { String fileName = file.getOriginalFilename(); String suffixName = fileName.substring(fileName.lastIndexOf(".")); long size = file.getSize(); log.info("上传的文件名称为:[{}],文件后缀为:[{}],文件大小为:[{}]!!", fileName, suffixName, size); fileName = UUID.randomUUID() + suffixName; log.info("转换后的文件名为:[{}]!!", fileName); File dest = new File(filePath + fileName); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } try { file.transferTo(dest); } catch (IOException e) { log.error("上传文件过程中发生异常!!", e); } } } return new Result(true, StatusCode.OK, "上传成功!!"); }}application.properties# 端口server.port=8082# 配置单个文件、多个文件大小spring.servlet.multipart.max-file-size=100MBspring.servlet.multipart.max-request-size=100MB# 文件上传保存路径file.path=E:/test/# 取消模板文件缓存spring.thymeleaf.cache=false文件 结构目录

November 5, 2019 · 2 min · jiezi