Spring Boot 上传文件(spring boot upload file)
本篇文章将说明在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)相关推荐
- Spring Boot(十七):使用Spring Boot上传文件
Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...
- (转)Spring Boot(十七):使用 Spring Boot 上传文件
http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...
- springboot上传文件同时传参数_Spring Boot 系列:使用 Spring Boot 上传文件
上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 2. ...
- Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)
Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...
- Spring Boot上传文件报UT005023 MultipartException NoSuchFileException
1.抛出问题: Spring Boot上传文件报: UT005023: Exception handling request to /management/certificateAuthority/u ...
- springboot urlresource_Spring Boot上传文件+部署到Tomcat
1 概述 Spring Boot上传文件,根据官方uploadfile示例修改的,可以打成war放到服务器上(笔者使用的是Tomcat).主要步骤是创建异常类,属性类,接口类与控制器类,最后进行少量修 ...
- java批量上传文件_Spring boot 实现单个或批量文件上传功能
一:添加依赖: org.springframework.boot spring-boot-starter-thymeleaf javax.servlet jstl org.apache.tomcat. ...
- Spring MVC上传文件原理和resolveLazily说明
问题:使用Spring MVC上传大文件,发现从页面提交,到进入后台controller,时间很长.怀疑是文件上传完成后,才进入.由于在HTTP首部自定义了"Token"字段用于权 ...
- Spring CommonsMultipartResolver 上传文件
http://yanglei008.iteye.com/blog/246920 Spring CommonsMultipartResolver 上传文件 博客分类: spring SpringMVCJ ...
最新文章
- gin context和官方context_gin 源码阅读(一) -- 启动
- matlab怎么算2乘2矩阵,【Matlab】2.矩阵的运算
- python爬虫获取小说根据正文调用函数传入章节地址列表_python爬虫之小说章节获取,聊斋志异小说完整版...
- ausam3x 嵌入式linux,ATSAM3X8EA-AU - 微控制器, 32位, SAM3X系列, ARM 皮质-M3, 84nb
- MUI入门小白到大师 - 讲解
- Node.js路径操作
- Jmeter全局变量设置
- Programming pearls 编程珠玑的题目
- RTMP 协议学习总结
- 字节跳动python面试题校招_字节跳动校招----编程题(Python)
- 调用webservice服务方式总结
- 微信html刷新页面,填坑——解决微信网页中刷新的问题
- Error: No EPCS layout data - looking for section [EPCS-C84018]
- 携程校招编程题 bit count
- 围棋规则的计算机实现
- vxworks点滴记录
- 一篇论文的正确格式是什么?
- mt7620a上tf卡驱动的支持
- python定量城市研究_Python定量城市研究实战
- 概率论与数理统计 | (3) 随机变量
热门文章
- Vigenère密码
- Codeforces 1305F Kuroni and the Punishment (随机化)
- oracle开发项目流程,如何开发ORACLE存储过程
- 在doc中生成柱状图_Python从CSV文件导入数据和生成简单图表
- lock交替打印_面试题Synchronized实现两个线程交替打印
- 关于Qt QFileDevice::map()接口的一些学习记录
- POJ 1486 Sorting Slides(二分图完全匹配必须边)题解
- 洛谷 P2296 寻找道路
- javascript - this
- Dynamics 365 CRM Connected Field Service 自动发送command