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

1本文源码 2GitHub地址:知了一笑 3https://github.com/cicadasmile/spring-boot-base

一、文件上传

文件上传是项目开发中一个很常用的功能,常见的如头像上传,各类文档数据上传等。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<hr> 2<h3>1、单文件上传</h3> 3<form method="POST" action="/upload1" enctype="multipart/form-data"> 4 上传人:<input type="text" name="userName"><br> 5 文件一:<input type="file" name="file"><br> 6 <input type="submit" value="Submit"> 7</form> 8<hr> 9<h3>2、多文件上传</h3> 10<form method="POST" action="/upload2" enctype="multipart/form-data"> 11 上传人:<input type="text" name="userName"><br> 12 文件一:<input type="file" name="file"><br> 13 文件二:<input type="file" name="file"><br><br> 14 <input type="submit" value="Submit"> 15</form> 16 17 18<hr>

3、配置页面入口

1import org.springframework.stereotype.Controller; 2import org.springframework.web.bind.annotation.GetMapping; 3@Controller 4public 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

1spring: 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文件中的配置,有效且正确。

1import org.slf4j.Logger; 2import org.slf4j.LoggerFactory; 3import org.springframework.web.bind.annotation.RequestMapping; 4import org.springframework.web.bind.annotation.RequestParam; 5import org.springframework.web.bind.annotation.RestController; 6import org.springframework.web.multipart.MultipartFile; 7import javax.servlet.http.HttpServletRequest; 8import java.io.File; 9import java.util.Map; 10@RestController 11public 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 == &gt;&gt;{}",paramMap); 21 } 22 try{ 23 if (!file.isEmpty()){ 24 // 打印文件基础信息 25 LOGGER.info("Name == &gt;&gt;{}",file.getName()); 26 LOGGER.info("OriginalFilename == &gt;&gt;{}",file.getOriginalFilename()); 27 LOGGER.info("ContentType == &gt;&gt;{}",file.getContentType()); 28 LOGGER.info("Size == &gt;&gt;{}",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 == &gt;&gt;{}",paramMap); 49 } 50 try{ 51 if (fileList.length &gt; 0){ 52 for (MultipartFile file:fileList){ 53 // 打印文件基础信息 54 LOGGER.info("Name == &gt;&gt;{}",file.getName()); 55 LOGGER.info("OriginalFilename == &gt;&gt;{}",file.getOriginalFilename()); 56 LOGGER.info("ContentType == &gt;&gt;{}",file.getContentType()); 57 LOGGER.info("Size == &gt;&gt;{}",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}

四、源代码地址

1GitHub地址:知了一笑 2https://github.com/cicadasmile/spring-boot-base 3码云地址:知了一笑 4https://gitee.com/cicadasmile/spring-boot-base

</string,></string,>

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑 - HelloWorld