👨🎓作者:bug菌
✏️博客:CSDN、掘金、infoQ、51CTO等
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
二、需求分析🔥
突然加了这么个需求,要求对用户材料文件需要手动上传并指定文件路径保存。好家伙,一听,觉得没啥问题,又觉得有点欠妥,于是我便问了这么一句,需要支持文件批量嘛?你不问我还没觉得,那就加上吧!可支持用户批量上传。
这不是自己给自己加戏么?这开过光的嘴!说啥来啥,那能咋办,干就完了!
三、实现思路🔥
其实对于文件上传,还是老样子,通过formData表单提交的方式进行文件附件上传,而不是现在所谓的json接收格式数据,比如@RequestBody注解;那为什么不能用它来接收?因为@RequestBody默认接收的enctype(MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则SpringMVC在解析集合请求参数时是不会自动转换成JSON数据再解析成相应的集合。
那对于multipart/form-data 提交方式,那我们就可以通过使用@RequestParam(springmvc中接收普通参数的注解),将请求参数绑定到控制器的方法参数上,或者你也省略映射不需要绑定(这就要求命名必须一致),那就靠spring对于formdata带文件和数据字段一起上传的情况做自动映射。如果需要对参数进行重命名, 那么你就可以使用@RequestParam 映射前端传过来的字段名,而接收的时候自己自定义就行,比如如下这种方式,前端传给你的参数字段叫id,而你接收则是用dfId。
@RequestParam("id") String dfId
而对于多文件的话,我们就可以定义一个
MultipartFile [] 数组接收即可。比如如下演示:
@RequestParam("files") MultipartFile[] files
这样的话,结合一下不就支持多文件上传协同其他字段一并提交处理了。
四、实现方案🔥
通过上方我们对此的分析可得,我们可以有两种方式可以进行实现,虽然大同小异,但是论标准,我就给大家讲一种最合理的实现方式,接下来我以实际例子作为演示。
比如,批量文件+数据字段的情况,论这种需求接口应该怎么定义呢?很好办呀?看我给大家露一手。仅供参考:
具体实现代码如下:
@PostMapping(value = "/upload-files")
@ApiOperation(value = "文件上传(支持批量)", notes = "文件上传(支持批量)")
public ResultResponse<Boolean> uploadFiles(@RequestParam("files") MultipartFile[] files,
@RequestParam("type") Integer type,
@RequestParam("id") String dfId) throws IOException {
return declarationFormService.uploadFiles(files, type, dfId);
}
然后我们来通过postman来测试下该接口,看看是否能拿到该参数信息,包括文件。
接下来我们在接口上打个断点,查看一下这些参数能否都被正常接收?
如下是实际断点截图:
接收到的参数信息与我postman所添加的参数内容完全一致,接收正常,能看到文件也是以数组的格式展示(
MultipartFile [ 2 ]),这就意味着你待会儿如果要进行文件保存,那你就可以通过使用files进行循环一波即可。
比如我实际保存写法,仅供参考:
... ...
ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
五、往期推荐🔥
- springboot系列(一):如何创建springboot项目及启动
- springboot系列(二):yaml、properties两配置文件介绍及使用
- springboot系列(三):多环境切换,实例演示
- springboot系列(四):stater入门
- springboot系列(五):史上最最最全springboot常用注解
- springboot系列(六):mysql配置及数据库查询
- springboot系列(七):如何通过mybatis-plus实现接口增删改查
- springboot系列(八):mybatis-plus之条件构造器使用手册
- springboot系列(九):mybatis-plus之如何自定义sql
- springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
- springboot系列(十一):实现多数据源配置,开箱即用
- springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
- springboot系列(十三):如何实现发送普通邮件?你一定得会
- springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
- springboot系列(十五):如何实现静态邮件模板发送?你一定得会
- springboot系列(十六):如何实现发送邮件提醒,附完整源码
- springboot系列(十七):集成在线接口文档Swagger2
- springboot系列(十八):如何Windows安装redis?你玩过么
- springboot系列(十九):如何集成redis?不会我教你
- springboot系列(二十):如何通过redis实现手机号验证码功能
- ... ...
文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!