Spring Boot(十七):使用Spring Boot上传文件
Spring Boot(十七):使用Spring Boot上传文件
环境:Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0
一、pom包配置
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version>
</parent><properties><java.version>1.8</java.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><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>
引入了spring-boot-starter-thymeleaf
做页面模板引擎,写一些简单的上传示例。
二、启动类设置
@SpringBootApplicationpublic classFileUploadWebApplication {public static void main(String[] args) throwsException {SpringApplication.run(FileUploadWebApplication.class, args);}//Tomcat large file upload connection reset @BeanpublicTomcatEmbeddedServletContainerFactory tomcatEmbedded() {TomcatEmbeddedServletContainerFactory tomcat= newTomcatEmbeddedServletContainerFactory();tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector->{if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {//-1 means unlimited((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);}});returntomcat;}}
tomcatEmbedded这段代码是为了解决,上传文件大于10M出现连接重置的问题。此异常内容GlobalException也捕获不到。
三、编写前端页面
上传页面代码:
<!DOCTYPE html> <htmlxmlns:th="http://www.thymeleaf.org"> <body> <h1>Spring Boot file upload example</h1> <formmethod="POST"action="/upload"enctype="multipart/form-data"><inputtype="file"name="file" /><br/><br/><inputtype="submit"value="Submit" /> </form> </body> </html>
非常简单的一个Post请求,一个选择框选择文件,一个提交按钮,效果如下:
上传结果展示页面:
<!DOCTYPE html> <htmllang="en"xmlns:th="http://www.thymeleaf.org"> <body> <h1>Spring Boot - Upload Status</h1> <divth:if="${message}"><h2th:text="${message}"/> </div> </body> </html>
效果图如下:
四、编写上传控制类
访问localhost自动跳转到上传页面:
@GetMapping("/")publicString index() {return "upload"; }
上传业务处理:
@PostMapping("/upload")public String singleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {if(file.isEmpty()) {redirectAttributes.addFlashAttribute("message", "Please select a file to upload");return "redirect:uploadStatus";}try{//Get the file and save it somewherebyte[] bytes =file.getBytes();Path path= Paths.get(UPLOADED_FOLDER +file.getOriginalFilename());Files.write(path, bytes);redirectAttributes.addFlashAttribute("message","You successfully uploaded '" + file.getOriginalFilename() + "'");}catch(IOException e) {e.printStackTrace();}return "redirect:/uploadStatus"; }
上面代码的意思就是,通过MultipartFile
读取文件信息,如果文件为空跳转到结果页并给出提示;如果不为空读取文件流并写入到指定目录,最后将结果展示到页面。
MultipartFile
是Spring上传文件的封装类,包含了文件的二进制流和文件属性等信息,在配置文件中也可对相关属性进行配置,基本的配置信息如下:
spring.http.multipart.enabled=true
#默认支持文件上传.spring.http.multipart.file-size-threshold=0
#支持文件写入磁盘.spring.http.multipart.location=
# 上传文件的临时目录spring.http.multipart.max-file-size=1Mb
# 最大支持文件大小spring.http.multipart.max-request-size=10Mb
# 最大支持请求大小
最常用的是最后两个配置内容,限制文件上传大小,上传时超过大小会抛出异常:
五、异常处理
@ControllerAdvicepublic classGlobalExceptionHandler {@ExceptionHandler(MultipartException.class)publicString handleError1(MultipartException e, RedirectAttributes redirectAttributes) {redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());return "redirect:/uploadStatus";} }
设置一个@ControllerAdvice
用来监控Multipart
上传的文件大小是否受限,当出现此异常时在前端页面给出提示。利用@ControllerAdvice
可以做很多东西,比如全局的统一异常处理等,感兴趣的同学可以下来了解。
转载于:https://www.cnblogs.com/lizm166/p/10270761.html
Spring Boot(十七):使用Spring Boot上传文件相关推荐
- Spring Boot 静态资源映射与上传文件路由配置
默认静态资源映射目录 默认映射路径 在平常的 web 开发中,避免不了需要访问静态资源,如常规的样式,JS,图片,上传文件等;Spring Boot 默认配置对静态资源映射提供了如下路径的映射 /st ...
- Spring Boot 上传文件(spring boot upload file)
本篇文章将说明在Spring Boot web程序中如何上传文件. 开发环境: 1. eclipse Oxygen Release (4.7.0) 2. Spring Boot 1.4.3 RELEA ...
- springboot上传文件临时文件夹找不到不能成功上传问题
错误信息1:org.springframework.web.multipart.MultipartException: Could not parse multipart servlet reques ...
- SpringBoot+Vue上传文件
最近在研究SpringBoot+Vue的文件上传,踩了不少坑.现在将正确的文件上传流程分享一下. 一.前端采用ElementUI组件 前端页面完整代码: <template><el- ...
- (转)Spring Boot(十七):使用 Spring Boot 上传文件
http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...
- Spring Boot 2.0 多图片上传加回显
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:http://r6f.cn/crEY 这两天公司有 ...
- spring boot进行上传文件
1.pom文件添加依赖 <!-- 添加thymeleaf --><dependency> <groupId>org.springframework.boot< ...
- springboot 上传文件解析入库_十五分钟用Spring Boot实现文件上传功能
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且制作一个文件上传系统, 用户可以将本地文件上传到服务器上.我将假设读者为几乎零基础, ...
- springboot上传文件同时传参数_Spring Boot 系列:使用 Spring Boot 上传文件
上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 2. ...
最新文章
- Windows API一日一练(56)SetEndOfFile和GetFileSizeEx函数
- BPM实例分享:如何设置开窗高度与宽度?
- Java XML解析工具 JDOM介绍及使用实例
- JAVA基础知识之JDBC——JDBC事务处理及批量更新
- spring拦截器-过滤器的区别
- 再议指针和引用的一些事情吧
- 瞧瞧,这样的代码才叫 Pythonic
- 006_理解inode
- 1.1 WEB API 在帮助文档页面进行测试
- 队列(链式存储结构)
- 斐讯k2路由器v22.4.6.3版本刷breed刷华硕固件方法
- nema0183 java解析_NEMA-0183(GPRMC GPGGA)详细解释
- 宋宝华:公元1024年Linux内核的尘封往事
- php echo eot,(基础篇)php中理解print EOT分界符和echo EOT的用法区别
- 苹果cms模板_苹果cms怎么做seo?
- 幼麟・闪影・奎特尔~2019不太冷!
- 不止终端热闹,CES 2016上半导体厂商有哪些新动作?---ESM
- 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化
- Apache Doris三种数据模型(Aggregate、Uniq、Duplicate)的使用及其注意点
- python画英国国旗_python ASCII艺术英国国旗
热门文章
- 二 用标准c语言实现hanoi塔问题,天大2016年1二月《数据结构》期末大作业考核要求.doc...
- php u6536编码转,详谈PHP编码转换问题
- java解析mqtt_物联网安全系列 | MQTT协议安全
- 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
- datagrid只传入了一部分的数据 未显示全_软件开发面试之数据库事务篇
- linux:scp命令
- 【H2 Database】shell
- java中构造器快捷方式_java 构造器 (构造方法)
- python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例
- python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)