本文源码:GitHub·点这里 || GitEE·点这里

一、文件上传

文件上传是项目开发中一个很常用的功能,常见的如头像上传,各类文档数据上传等。SpringBoot使用MultiPartFile接收来自表单的file文件,然后执行上传文件。该案例基于SpringBoot2.0中yml配置,管理文件上传的常见属性。该案例演示单文件上传和多文件上传。

二、搭建文件上传界面

1、引入页面模板Jar包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

2、编写简单的上传页面

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <body>
  4. <hr/>
  5. <h3>1、单文件上传</h3>
  6. <form method="POST" action="/upload1" enctype="multipart/form-data">
  7. 上传人:<input type="text" name="userName" /><br/>
  8. 文件一:<input type="file" name="file" /><br/>
  9. <input type="submit" value="Submit" />
  10. </form>
  11. <hr/>
  12. <h3>2、多文件上传</h3>
  13. <form method="POST" action="/upload2" enctype="multipart/form-data">
  14. 上传人:<input type="text" name="userName" /><br/>
  15. 文件一:<input type="file" name="file" /><br/>
  16. 文件二:<input type="file" name="file" /><br/><br/>
  17. <input type="submit" value="Submit" />
  18. </form>
  19. </body>
  20. </html>
  21. <hr/>

3、配置页面入口

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. @Controller
  4. public class PageController {
  5. /**
  6. * 上传页面
  7. */
  8. @GetMapping("/uploadPage")
  9. public String uploadPage (){
  10. return "upload" ;
  11. }
  12. }

三、与SpringBoot2.0整合

1、核心配置文件

上传文件单个限制

max-file-size: 5MB

上传文件总大小限制

max-request-size: 6MB

  1. spring:
  2. application:
  3. # 应用名称
  4. name: node14-boot-file
  5. servlet:
  6. multipart:
  7. # 启用
  8. enabled: true
  9. # 上传文件单个限制
  10. max-file-size: 5MB
  11. # 总限制
  12. max-request-size: 6MB

2、文件上传核心代码

如果单个文件大小超出1MB,抛出异常

FileSizeLimitExceededException:

如果上传文件总大小超过6MB,抛出异常

SizeLimitExceededException:

这样就完全验证了YML文件中的配置,有效且正确。

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RequestParam;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import org.springframework.web.multipart.MultipartFile;
  7. import javax.servlet.http.HttpServletRequest;
  8. import java.io.File;
  9. import java.util.Map;
  10. @RestController
  11. public class FileController {
  12. private static final Logger LOGGER = LoggerFactory.getLogger(FileController.class) ;
  13. /**
  14. * 测试单个文件上传
  15. */
  16. @RequestMapping("/upload1")
  17. public String upload1 (HttpServletRequest request, @RequestParam("file") MultipartFile file){
  18. Map<String, String[]> paramMap = request.getParameterMap() ;
  19. if (!paramMap.isEmpty()){
  20. LOGGER.info("paramMap == >>{}",paramMap);
  21. }
  22. try{
  23. if (!file.isEmpty()){
  24. // 打印文件基础信息
  25. LOGGER.info("Name == >>{}",file.getName());
  26. LOGGER.info("OriginalFilename == >>{}",file.getOriginalFilename());
  27. LOGGER.info("ContentType == >>{}",file.getContentType());
  28. LOGGER.info("Size == >>{}",file.getSize());
  29. // 文件输出地址
  30. String filePath = "F:/boot-file/" ;
  31. new File(filePath).mkdirs();
  32. File writeFile = new File(filePath, file.getOriginalFilename());
  33. file.transferTo(writeFile);
  34. }
  35. return "success" ;
  36. } catch (Exception e){
  37. e.printStackTrace();
  38. return "系统异常" ;
  39. }
  40. }
  41. /**
  42. * 测试多文件上传
  43. */
  44. @RequestMapping("/upload2")
  45. public String upload2 (HttpServletRequest request, @RequestParam("file") MultipartFile[] fileList){
  46. Map<String, String[]> paramMap = request.getParameterMap() ;
  47. if (!paramMap.isEmpty()){
  48. LOGGER.info("paramMap == >>{}",paramMap);
  49. }
  50. try{
  51. if (fileList.length > 0){
  52. for (MultipartFile file:fileList){
  53. // 打印文件基础信息
  54. LOGGER.info("Name == >>{}",file.getName());
  55. LOGGER.info("OriginalFilename == >>{}",file.getOriginalFilename());
  56. LOGGER.info("ContentType == >>{}",file.getContentType());
  57. LOGGER.info("Size == >>{}",file.getSize());
  58. // 文件输出地址
  59. String filePath = "F:/boot-file/" ;
  60. new File(filePath).mkdirs();
  61. File writeFile = new File(filePath, file.getOriginalFilename());
  62. file.transferTo(writeFile);
  63. }
  64. }
  65. return "success" ;
  66. } catch (Exception e){
  67. return "fail" ;
  68. }
  69. }
  70. }

四、源代码地址

  1. GitHub·地址
  2. https://github.com/cicadasmile/spring-boot-base
  3. GitEE·地址
  4. https://gitee.com/cicadasmile/spring-boot-base

SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑的更多相关文章

  1. 十三:SpringBoot-基于Yml配置方式,实现文件上传逻辑

    SpringBoot-基于Yml配置方式,实现文件上传逻辑 1.文件上传 2.搭建文件上传界面 2.1 引入页面模板Jar包 2.2 编写简单的上传页面 2.3 配置页面入口 3.SpringBoot ...

  2. SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.事务管理简介 1.事务基本概念 一组业务操作ABCD,要么全部 ...

  3. 基于 Django的Ajax实现 文件上传

    ---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax ...

  4. SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)

    文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFil ...

  5. SpringMVC 文件上传配置,多文件上传,使用的MultipartFile

    一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置Multipa ...

  6. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  7. SpringBoot集成基于tobato的fastdfs-client实现文件上传下载和删除

    1. 简介   基于tobato的fastdfs-client是一个功能完善的FastDFS客户端工具,它是在FastDFS作者YuQing发布的客户端基础上进行了大量的重构,提供了上传.下载.删除. ...

  8. 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s

     1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2  spring-mv ...

  9. 基于jquery ajax的多文件上传进度条

    效果图 前端代码,基于jquery <!DOCTYPE html> <html> <head> <title>主页</title> < ...

随机推荐

  1. View 视图动画基础

  2. 原生Base64编码/解码(OC与Swift)

    Objective-C NSString *plainString = @"foo"; Encoding NSData *plainData = [plainString data ...

  3. CSS3定时提示动画特效

    在线演示 本地下载

  4. python优缺点小结

    优点:  1.语言简洁优美 例如去除了大括号,写法简单,写法更接近于英语,其他语言几十上百行的代码,十来行就能解决,而且还好看 2.跨平台,window.linux.mac通用 3.排行高,社区完善 ...

  5. POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串

    题目链接:https://vjudge.net/problem/POJ-2774 Long Long Message Time Limit: 4000MS   Memory Limit: 131072 ...

  6. Discuz X3游客看小图功能导致文字内容隐藏的【修复方法】

    如果帖子内容以图片开始,并且开启了游客看小图功能,那么图片下面的文字也会被隐藏,这是不科学的(在图片上边的文字不会被隐藏)查看DZ源代码,发现是程序猿疏忽漏掉了</div> 下边1314学 ...

  7. CSS3实现水位充满文字特效

    CSS3实现水位充满文字特效是一款既是Loading特效也是文字特效,Loading动画开始时,文字中的水位渐渐上升,为了模拟水位上升的真实效果,水面还会波浪浮动,当Loading动画结束时,文字中的 ...

  8. BZOJ 1616 [Usaco2008 Mar]Cow Travelling游荡的奶牛:dp【网格型】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1616 题意: 有一个n*m的网格. '.'表示平坦的草地,'*'表示挡路的树(不能走). ...

  9. BZOJ 1626 [Usaco2007 Dec]Building Roads 修建道路:kruskal(最小生成树)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1626 题意: 有n个农场,坐标为(x[i],y[i]). 有m条原先就修好的路,连接农场( ...

  10. mysql七:视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...