【Bug】 SpringBoot中MultipartFile文件上传到Server端,Server端异步处理报错:FileNotFoundException

博客讲述了在SpringBoot应用中,使用MultipartFile进行大文件上传时,由于异步处理导致的FileNotFoundException问题。作者通过线上日志排查发现,问题在于主线程结束后,Spring清除临时文件,子线程无法找到文件。解决方案是通过主线程获取流并传递给子线程,同时介绍了线程池、@Async和SpringMvc中关于MultipartFile的知识。
摘要由CSDN通过智能技术生成

需求

前端上传一个.zip压缩包,里面是很多需要处理的文件,Server端需要按照指定规则对这些文件进行处理,然后将处理后的文件重新打包,上传到公司的云存储服务oos上,并且将oos上的资源地址url给到前端提供下载。

设计

Q:和产品沟通后了解到,用户可能上传的文件很大,会超过500M;并且处理规则比较复杂,会导致处理流程过慢;但是与此同时,需要具有一定的实时性,不能让用户等待时间过长。

A:综上考虑,本质上就是一个大文件上传 & 处理的事。由于用户要求具有一定的实时性,所以我们采用线程池对上传的大文件异步处理。

线上日志排查问题

java.io.FileNotFoundException: XXXXXX/tmp/MultiPart7953817223010764667.tmp (No such file or directory)

出错的代码片段

// 主线程:接收文件
@PostMapping("/processFile")
public AjaxResult processFile(MultiPartFile file) {
   
  
  ......
  // 开启一个子线程异步处理该文件
  service.AsyncProcessFile(file)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值