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上传文件相关推荐

  1. Spring Boot 静态资源映射与上传文件路由配置

    默认静态资源映射目录 默认映射路径 在平常的 web 开发中,避免不了需要访问静态资源,如常规的样式,JS,图片,上传文件等;Spring Boot 默认配置对静态资源映射提供了如下路径的映射 /st ...

  2. Spring Boot 上传文件(spring boot upload file)

    本篇文章将说明在Spring Boot web程序中如何上传文件. 开发环境: 1. eclipse Oxygen Release (4.7.0) 2. Spring Boot 1.4.3 RELEA ...

  3. springboot上传文件临时文件夹找不到不能成功上传问题

    错误信息1:org.springframework.web.multipart.MultipartException: Could not parse multipart servlet reques ...

  4. SpringBoot+Vue上传文件

    最近在研究SpringBoot+Vue的文件上传,踩了不少坑.现在将正确的文件上传流程分享一下. 一.前端采用ElementUI组件 前端页面完整代码: <template><el- ...

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

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

  6. Spring Boot 2.0 多图片上传加回显

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:http://r6f.cn/crEY 这两天公司有 ...

  7. spring boot进行上传文件

    1.pom文件添加依赖 <!-- 添加thymeleaf --><dependency> <groupId>org.springframework.boot< ...

  8. springboot 上传文件解析入库_十五分钟用Spring Boot实现文件上传功能

    Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且制作一个文件上传系统, 用户可以将本地文件上传到服务器上.我将假设读者为几乎零基础, ...

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

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

最新文章

  1. Windows API一日一练(56)SetEndOfFile和GetFileSizeEx函数
  2. BPM实例分享:如何设置开窗高度与宽度?
  3. Java XML解析工具 JDOM介绍及使用实例
  4. JAVA基础知识之JDBC——JDBC事务处理及批量更新
  5. spring拦截器-过滤器的区别
  6. 再议指针和引用的一些事情吧
  7. 瞧瞧,这样的代码才叫 Pythonic
  8. 006_理解inode
  9. 1.1 WEB API 在帮助文档页面进行测试
  10. 队列(链式存储结构)
  11. 斐讯k2路由器v22.4.6.3版本刷breed刷华硕固件方法
  12. nema0183 java解析_NEMA-0183(GPRMC GPGGA)详细解释
  13. 宋宝华:公元1024年Linux内核的尘封往事
  14. php echo eot,(基础篇)php中理解print EOT分界符和echo EOT的用法区别
  15. 苹果cms模板_苹果cms怎么做seo?
  16. 幼麟・闪影・奎特尔~2019不太冷!
  17. 不止终端热闹,CES 2016上半导体厂商有哪些新动作?---ESM
  18. 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化
  19. Apache Doris三种数据模型(Aggregate、Uniq、Duplicate)的使用及其注意点
  20. python画英国国旗_python ASCII艺术英国国旗

热门文章

  1. 二 用标准c语言实现hanoi塔问题,天大2016年1二月《数据结构》期末大作业考核要求.doc...
  2. php u6536编码转,详谈PHP编码转换问题
  3. java解析mqtt_物联网安全系列 | MQTT协议安全
  4. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
  5. datagrid只传入了一部分的数据 未显示全_软件开发面试之数据库事务篇
  6. linux:scp命令
  7. 【H2 Database】shell
  8. java中构造器快捷方式_java 构造器 (构造方法)
  9. python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例
  10. python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)