SpringBoot同时提交文件和数据,在Service层对MultipartFile文件进行处理

本文讲述了作者在后端开发中遇到的问题,如何将`MultipartFile`和自定义数据一起通过`@RequestParam`接收,以及如何在Service层正确处理文件,避免因临时文件销毁导致的异常。作者使用了Gson将JSON转换为Java对象,并提到`Content-Type`的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想同时将file文件和data参数数据同时提交给后端,而不是分开进行提交。因为这样可以避免只上传一方而另一方没有上传。

这里依旧使用MultipartFile进行接受文件对象。但是我在提交时遇到了两个问题

问题1

后端如何同时接受文件对象和自定义引用对象?

我查阅了一些博客发现他们有的人是使用@RequestBody来接受参数对象的。但是我试了,不行。因为MultipartFile所需的请求头是'multipart/form-data'而@RequestBody所需的请求头是application/json,所以这两个不能一起使用。

解决办法:

我使用了gson将json转换成java对象,这样在接受参数时我只需要接受String类型的参数就可以了

问题2

在service层对文件操作

我将对文件的操作放到了service层进行处理,但是一直报文件找不到异常。在查阅了资料后,发现是因为MultipartFile在接收参数时会创建一个临时文件,离开controller层时会对临时文件进行销毁。所以报文件找不到异常

解决办法:

可以将文件转换为输入流,传到service层,然后在service层在对其操作,这样就可以将文件数据长时间保存下来

@SneakyThrows
@PostMapping("/add")
public JsonResult add(@RequestParam("file") MultipartFile file,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值