Spring Boot实现文件上传

简介: Spring Boot实现文件上传

文件上传是网页常见的一个表单提交形式。实质上,文件上传是前端发送一个POST请求,后端接收即可。不过在Spring Boot中怎么实现文件上传呢?

一、上传单个文件

(1) 前端

先做一个简易的表单,代码如下:

<formenctype="multipart/form-data"method="POST"action="/upload"><inputtype="text"name="imgName"/><inputtype="file"name="imgFile"/><inputtype="submit"value="upload"/></form>

需要注意的是我们如果要上传文件,必须设定表单为multipart/form-data格式,上面的标签中的enctype属性就是设定表单数据格式的属性。

即指定了表单该条目为文件类型。

网络异常,图片无法展示
|

如果不想使用form标签中的按钮,而是自己组装数据,可以写如下函数:

/** * 上传文件函数 * @param {*} requestURL 请求地址 * @param {*} file 文件(input对象的文件) */functionupload(requestURL, file) {
letform=newFormData(); //新建表单对象form.append('img', file); //向表单对象添加文件,名字为imgfetch(requestURL, {
method: 'POST',
body: form  }).then((response) => {
returnresponse.json();
  }).then((result) => {
//请求完成后对结果的处理console.log(result);
  })
}

其中获取input标签中的file

letinput=document.querySelector('input'); //查询到input标签letfile=input.files[0]; //input的属性files表示选择的文件数组,如果是单文件就指定下标0

注意可以不用指定fetch中的headerscontent-type,发送FormData对象可以自行适配。

(2) 后端

先在Spring Boot配置文件application.properties中配置文件上传大小限制,因为其默认限制是1mb,所以上传文件稍大就会失败:

# 设置内置Tomcat请求大小为20MB
server.tomcat.max-http-form-post-size=20MB
# 设置请求最大大小为20MB
spring.servlet.multipart.max-request-size=20MB
# 设置文件上传最大大小为20MB
spring.servlet.multipart.max-file-size=20MB

三个选项最好是都设定一下,如果想无限制可以都填-1

然后在Controller类中写如下方法:

@PostMapping("/upload")
publicStringupload(@RequestParam("imgFile") MultipartFilefile, @RequestParam("imgName") Stringname) throwsException {
// 设置上传至项目文件夹下的uploadFile文件夹中,没有文件夹则创建Filedir=newFile("uploadFile");
if (!dir.exists()) {
dir.mkdirs();
    }
file.transferTo(newFile(dir.getAbsolutePath() +File.separator+name+".png"));
return"上传完成!文件名:"+name;
}

需要注意的是,上传过来的文件在Java中是MultipartFile类型,@RequestParam中的值即为我们前端表单每一项(input标签)里面的name属性值,或者是使用FormData对象append时对应的那个名字,要一一对应,必须相同。前端表单中的action属性即为表单提交至的地址,对应我们Controller的@PostMapping中的值。

MultipartFile实例通过使用方法transferTo方法实现把上传的文件保存至指定位置。

效果:

网络异常,图片无法展示
|

文件也上传至了指定位置:

网络异常,图片无法展示
|

注意最好是使用@RequestParam逐个接受参数,因为@RequestBody不支持multipart类型,参数多了可以分接口接收。

二、上传多个文件

上传多个文件其实也很简单,和上面上传单个文件差别不大。在前端的这一条表示文件的条目标签中加入属性multiple即可,我的代码如下:

<formenctype="multipart/form-data"method="POST"action="/upload"><inputtype="text"name="imgColName"/><inputtype="file"name="imgFile"multiple/><inputtype="submit"value="upload"/></form>

这时,再上传文件时后端接收到的是MultipartFile数组,因此在上述的Controller方法中的对应的形参改成MultipartFile[]类型即可,然后遍历操作,具体例子如下:

@PostMapping("/upload")
publicStringupload(@RequestParam("imgFile") MultipartFile[] files, @RequestParam("imgColName") Stringname) throwsException {
Filedir=newFile("uploadFile");
if (!dir.exists()) {
dir.mkdirs();
    }
for (MultipartFilefile : files) {
file.transferTo(newFile(dir.getAbsolutePath() +File.separator+file.getOriginalFilename()));
    }
return"上传完成!图集名:"+name;
}

示例程序仓库地址

相关文章
|
6月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
145 0
|
6月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
163 0
|
4天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
15 2
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
58 2
|
5月前
|
Web App开发 前端开发 Java
基于Spring3 MVC实现基于HTML form表单文件上传
基于Spring3 MVC实现基于HTML form表单文件上传
45 7
基于Spring3 MVC实现基于HTML form表单文件上传
|
5月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
53 2
|
5月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
63 2
|
5月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
423 1
|
5月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
54 1