1本文源码 2GitHub地址:知了一笑 3https://github.com/cicadasmile/spring-boot-base
一、文件上传
文件上传是项目开发中一个很常用的功能,常见的如头像上传,各类文档数据上传等。SpringBoot使用MultiPartFile接收来自表单的file文件,然后执行上传文件。该案例基于SpringBoot2.0中yml配置,管理文件上传的常见属性。该案例演示单文件上传和多文件上传。
二、搭建文件上传界面
1、引入页面模板Jar包
1<dependency> 2 <groupid>org.springframework.boot</groupid> 3 <artifactid>spring-boot-starter-thymeleaf</artifactid> 4</dependency>
2、编写简单的上传页面
1<hr> 2<h3>1、单文件上传</h3> 3<form method="POST" action="/upload1" enctype="multipart/form-data"> 4 上传人:<input type="text" name="userName"><br> 5 文件一:<input type="file" name="file"><br> 6 <input type="submit" value="Submit"> 7</form> 8<hr> 9<h3>2、多文件上传</h3> 10<form method="POST" action="/upload2" enctype="multipart/form-data"> 11 上传人:<input type="text" name="userName"><br> 12 文件一:<input type="file" name="file"><br> 13 文件二:<input type="file" name="file"><br><br> 14 <input type="submit" value="Submit"> 15</form> 16 17 18<hr>
3、配置页面入口
1import org.springframework.stereotype.Controller; 2import org.springframework.web.bind.annotation.GetMapping; 3@Controller 4public class PageController { 5 /** 6 * 上传页面 7 */ 8 @GetMapping("/uploadPage") 9 public String uploadPage (){ 10 return "upload" ; 11 } 12}
三、与SpringBoot2.0整合
1、核心配置文件
上传文件单个限制 max-file-size: 5MB 上传文件总大小限制 max-request-size: 6MB
1spring: 2 application: 3 # 应用名称 4 name: node14-boot-file 5 servlet: 6 multipart: 7 # 启用 8 enabled: true 9 # 上传文件单个限制 10 max-file-size: 5MB 11 # 总限制 12 max-request-size: 6MB
2、文件上传核心代码
如果单个文件大小超出1MB,抛出异常 FileSizeLimitExceededException: 如果上传文件总大小超过6MB,抛出异常 SizeLimitExceededException: 这样就完全验证了YML文件中的配置,有效且正确。
1import org.slf4j.Logger; 2import org.slf4j.LoggerFactory; 3import org.springframework.web.bind.annotation.RequestMapping; 4import org.springframework.web.bind.annotation.RequestParam; 5import org.springframework.web.bind.annotation.RestController; 6import org.springframework.web.multipart.MultipartFile; 7import javax.servlet.http.HttpServletRequest; 8import java.io.File; 9import java.util.Map; 10@RestController 11public class FileController { 12 private static final Logger LOGGER = LoggerFactory.getLogger(FileController.class) ; 13 /** 14 * 测试单个文件上传 15 */ 16 @RequestMapping("/upload1") 17 public String upload1 (HttpServletRequest request, @RequestParam("file") MultipartFile file){ 18 Map<string, string[]> paramMap = request.getParameterMap() ; 19 if (!paramMap.isEmpty()){ 20 LOGGER.info("paramMap == >>{}",paramMap); 21 } 22 try{ 23 if (!file.isEmpty()){ 24 // 打印文件基础信息 25 LOGGER.info("Name == >>{}",file.getName()); 26 LOGGER.info("OriginalFilename == >>{}",file.getOriginalFilename()); 27 LOGGER.info("ContentType == >>{}",file.getContentType()); 28 LOGGER.info("Size == >>{}",file.getSize()); 29 // 文件输出地址 30 String filePath = "F:/boot-file/" ; 31 new File(filePath).mkdirs(); 32 File writeFile = new File(filePath, file.getOriginalFilename()); 33 file.transferTo(writeFile); 34 } 35 return "success" ; 36 } catch (Exception e){ 37 e.printStackTrace(); 38 return "系统异常" ; 39 } 40 } 41 /** 42 * 测试多文件上传 43 */ 44 @RequestMapping("/upload2") 45 public String upload2 (HttpServletRequest request, @RequestParam("file") MultipartFile[] fileList){ 46 Map<string, string[]> paramMap = request.getParameterMap() ; 47 if (!paramMap.isEmpty()){ 48 LOGGER.info("paramMap == >>{}",paramMap); 49 } 50 try{ 51 if (fileList.length > 0){ 52 for (MultipartFile file:fileList){ 53 // 打印文件基础信息 54 LOGGER.info("Name == >>{}",file.getName()); 55 LOGGER.info("OriginalFilename == >>{}",file.getOriginalFilename()); 56 LOGGER.info("ContentType == >>{}",file.getContentType()); 57 LOGGER.info("Size == >>{}",file.getSize()); 58 // 文件输出地址 59 String filePath = "F:/boot-file/" ; 60 new File(filePath).mkdirs(); 61 File writeFile = new File(filePath, file.getOriginalFilename()); 62 file.transferTo(writeFile); 63 } 64 } 65 return "success" ; 66 } catch (Exception e){ 67 return "fail" ; 68 } 69 } 70}
四、源代码地址
1GitHub地址:知了一笑 2https://github.com/cicadasmile/spring-boot-base 3码云地址:知了一笑 4https://gitee.com/cicadasmile/spring-boot-base
</string,></string,>