上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例。
1、pom 包配置
我们使用 Spring Boot 版本 2.1.0、jdk 1.8、tomcat 8.0。
org.springframework.boot
spring-boot-starter-parent
2.1.0.RELEASE
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-devtools
true
引入了spring-boot-starter-thymeleaf
做页面模板引擎,写一些简单的上传示例。
2、启动类设置
@SpringBootApplication
public class FileUploadWebApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(FileUploadWebApplication.class, args);
}
@Bean
public TomcatServletWebServerFactory tomcatEmbedded {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory;
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler instanceof AbstractHttp11Protocol>)) {
//-1 means unlimited
((AbstractHttp11Protocol>) connector.getProtocolHandler).setMaxSwallowSize(-1);
}
});
return tomcat;
}
}
tomcatEmbedded 这段代码是为了解决,上传文件大于10M出现连接重置的问题。此异常内容 GlobalException 也捕获不到。
![fd3970e92378cca3316993c26e550d8d.png](https://i-blog.csdnimg.cn/blog_migrate/d973dac50be5a2d717ac619d6dcb98e6.jpeg)
详细内容参考:Tomcat large file upload connection reset[1]
3、编写前端页面
上传页面
Spring Boot file upload example
Spring Boot file upload example
非常简单的一个 Post 请求,一个选择框选择文件,一个提交按钮,效果如下:
![d1c71667127883c7afddc4d7ce1fb9e9.png](https://i-blog.csdnimg.cn/blog_migrate/933d264bfb7e36b395f4fa835a41dada.jpeg)
上传结果展示页面:
Spring Boot - Upload Status
Spring Boot - Upload Status
效果图如下:
![43eb2bceefbfc3c38b2efe89a579055d.png](https://i-blog.csdnimg.cn/blog_migrate/1c7c06ba4a67a36bb756bccc46bc4e18.jpeg)
4、编写上传控制类
访问 localhost 自动跳转到上传页面:
@GetMapping("/")
public String index {
return "upload";
}
上传业务处理
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty) {
redirectAttributes.addFlashAttribute("message