本篇文章将说明在Spring Boot web程序中如何上传文件。

开发环境:

1. eclipse Oxygen Release (4.7.0)

2. Spring Boot 1.4.3 RELEASE

3. Spring 4.3.5 RELEASE

4. Thymelaef

5. Maven

6. Embedded Tomcat 8

1.最终的项目结构

2.项目所需依赖 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.thinkingingis</groupId><artifactId>spring-boot-fileupload</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>spring-boot-fileupload</name><url>http://maven.apache.org</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.3.RELEASE</version></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3. UploadController.java

用MultipartFile类去匹配上传的文件

package org.thinkingingis.controller;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;@Controller
public class UploadController {private static String UPLOAD_FOLDER = "H://temp//";@GetMapping("/")public String index() {return "upload";}@PostMapping("/upload")public String singleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {if(file.isEmpty()) {redirectAttributes.addFlashAttribute("message", "请选择一个上传文件");}try {byte[] bytes = file.getBytes();Path path = Paths.get(UPLOAD_FOLDER + file.getOriginalFilename());Files.write(path, bytes);redirectAttributes.addFlashAttribute("message", "已经将 '" + file.getOriginalFilename() + "' 的文件上传成功");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "redirect:/uploadStatus";}@GetMapping("/uploadStatus")public String uploadStatus() {return "uploadStatus";}}

4. Thymeleaf 前端页面

4.1 upload.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head><body><h1>ThinkingInGIS</h1> <br/><h1>Spring Boot 文件上传示例</h1><form method="POST" action="/upload" enctype="multipart/form-data"><input type="file" name="file" /><br/><br/><input type="submit" value="上传" />
</form></body>
</html>

4.2  uploadStatus.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head><body><h1>Spring Boot - 上传状态</h1><div th:if="${message}"><h2 th:text="${message}"></h2>
</div></body>
</html>

5. 处理文件过大的情况

下面 GlobalExceptionHandler.java 这个类是处理当上传文件超过10mb限制所引发的异常情况。

package org.thinkingingis.controller;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;@ControllerAdvice
public class GlobalExceptionHandler {public String handerError(MultipartException e, RedirectAttributes redirectAttributes) {redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());return "redirect:/uploadStatus";}}

6. Tomcat大文件重置连接

对于embedded tomcat ,需要声明TomcatEmbeddedServletContainerFactory

package org.thinkingingis.controller;import org.apache.coyote.http11.AbstractHttp11Protocol;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class SpringBootWebApplication {//private int maxUploadFileSize = 10 * 1024 * 1024;public static void main(String[] args) throws Exception {SpringApplication.run(SpringBootWebApplication.class, args);}//Tomcat large file upload connection reset@Beanpublic TomcatEmbeddedServletContainerFactory tomcatEmbedded() {TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {//-1 means unlimited((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);}});return tomcat;}
}

7. 在application.properties中设置上传文件的上限

#http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
#search multipart
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

8. 进入项目文件  输入 mvn spring-boot:run

9. 启动成功后浏览器输入 localhost:8080

上传成功后

到此就实现了Spring Boot上传文件的功能。

如遇到问题,欢迎通过公众号留言给作者,以便共同探讨。

邮箱:thinkingingis@qq.com

微信公众号:

Spring Boot 上传文件(spring boot upload file)相关推荐

  1. Spring Boot(十七):使用Spring Boot上传文件

    Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...

  2. (转)Spring Boot(十七):使用 Spring Boot 上传文件

    http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...

  3. springboot上传文件同时传参数_Spring Boot 系列:使用 Spring Boot 上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 2. ...

  4. Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)

    Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...

  5. Spring Boot上传文件报UT005023 MultipartException NoSuchFileException

    1.抛出问题: Spring Boot上传文件报: UT005023: Exception handling request to /management/certificateAuthority/u ...

  6. springboot urlresource_Spring Boot上传文件+部署到Tomcat

    1 概述 Spring Boot上传文件,根据官方uploadfile示例修改的,可以打成war放到服务器上(笔者使用的是Tomcat).主要步骤是创建异常类,属性类,接口类与控制器类,最后进行少量修 ...

  7. java批量上传文件_Spring boot 实现单个或批量文件上传功能

    一:添加依赖: org.springframework.boot spring-boot-starter-thymeleaf javax.servlet jstl org.apache.tomcat. ...

  8. Spring MVC上传文件原理和resolveLazily说明

    问题:使用Spring MVC上传大文件,发现从页面提交,到进入后台controller,时间很长.怀疑是文件上传完成后,才进入.由于在HTTP首部自定义了"Token"字段用于权 ...

  9. Spring CommonsMultipartResolver 上传文件

    http://yanglei008.iteye.com/blog/246920 Spring CommonsMultipartResolver 上传文件 博客分类: spring SpringMVCJ ...

最新文章

  1. gin context和官方context_gin 源码阅读(一) -- 启动
  2. matlab怎么算2乘2矩阵,【Matlab】2.矩阵的运算
  3. python爬虫获取小说根据正文调用函数传入章节地址列表_python爬虫之小说章节获取,聊斋志异小说完整版...
  4. ausam3x 嵌入式linux,ATSAM3X8EA-AU - 微控制器, 32位, SAM3X系列, ARM 皮质-M3, 84nb
  5. MUI入门小白到大师 - 讲解
  6. Node.js路径操作
  7. Jmeter全局变量设置
  8. Programming pearls 编程珠玑的题目
  9. RTMP 协议学习总结
  10. 字节跳动python面试题校招_字节跳动校招----编程题(Python)
  11. 调用webservice服务方式总结
  12. 微信html刷新页面,填坑——解决微信网页中刷新的问题
  13. Error: No EPCS layout data - looking for section [EPCS-C84018]
  14. 携程校招编程题 bit count
  15. 围棋规则的计算机实现
  16. vxworks点滴记录
  17. 一篇论文的正确格式是什么?
  18. mt7620a上tf卡驱动的支持
  19. python定量城市研究_Python定量城市研究实战
  20. 概率论与数理统计 | (3) 随机变量

热门文章

  1. Vigenère密码
  2. Codeforces 1305F Kuroni and the Punishment (随机化)
  3. oracle开发项目流程,如何开发ORACLE存储过程
  4. 在doc中生成柱状图_Python从CSV文件导入数据和生成简单图表
  5. lock交替打印_面试题Synchronized实现两个线程交替打印
  6. 关于Qt QFileDevice::map()接口的一些学习记录
  7. POJ 1486 Sorting Slides(二分图完全匹配必须边)题解
  8. 洛谷 P2296 寻找道路
  9. javascript - this
  10. Dynamics 365 CRM Connected Field Service 自动发送command