当前位置: 首页 > news >正文

springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException

springboot上传文件,使用异步操作处理上传的文件数据,出现异常如下:
这个是在异步之后使用传过来的MultipartFile对象尝试调用getInputStream方法发生的异常。
java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\tomcat.8082.9218483334936865663\work\Tomcat\localhost\sdBusinessOnlineSchool\upload_43decfda_03e1_49fe_a31a_1be71b8b9a4e_00000000.tmp (系统找不到指定的文件。)
看文件的后缀是一个缓存文件,找不到缓存文件,太奇怪了。

开启bebug模式,在文件上传的时候,系统会字段在本地创建一个临时的缓存文件,在接受请求的方法内调用文件对象获取输入流,也是按照这个地址来创建输入流。
在controller层的时候:
在这里插入图片描述
进入异步方法即将执行获取输入流的时候:
在这里插入图片描述
个人想法:因为当前文件上传的业务逻辑是调用异步方法,然后直接就返回,估计接收请求的方法在返回之前,如果缓存文件没有正在被使用,框架就会将缓存文件删除。

验证:
在controller层获取输入流并且不关闭。
在这里插入图片描述

异步方法内查看:(为了防止是因为主线程执行比异步线程慢影响结果,异步方法获取之前先睡三秒。)
在这里插入图片描述
文件并没有被删除掉。验证成功。
所以想要在异步方法也能读取到上传的文件,可以在开启异步之前就打开一个输入流,然后通过传参的方式将输入流传到异步方法内。在异步方法内使用完毕再释放输入流。
提醒:记得要把输入流对象传到异步方法,并手动关闭输入流,否则会一直占用内存资源,并且服务器本地的缓存文件也无法更改或删除

http://www.lryc.cn/news/130074.html

相关文章:

  • 安装jenkins-cli
  • linux通过NC工具启动临时端口监听
  • 开源语音聊天软件Mumble
  • JDK 1.6与JDK 1.8的区别
  • 单片机实训报告
  • 【编织时空四:探究顺序表与链表的数据之旅】
  • PHP8的字符串操作1-PHP8知识详解
  • 电脑提示msvcp140.dll丢失的解决方法,dll组件怎么处理
  • stable diffusion基础
  • Greiner–Hormann裁剪算法深度探索:C++实现与应用案例
  • Automatically Correcting Large Language Models
  • 【学习FreeRTOS】第8章——FreeRTOS列表和列表项
  • 分布式图数据库 NebulaGraph v3.6.0 正式发布,强化全文索引能力
  • 在 ubuntu 18.04 上使用源码升级 OpenSSH_7.6p1到 OpenSSH_9.3p1
  • python中可以处理word文档的模块:docx模块
  • TikTok或将于8月底关闭半闭环、速卖通或将推出“半托管”模式
  • 《凤凰架构》第二章——访问远程服务
  • 【Diffusion】李宏毅2023机器学习Diffusion笔记
  • CloudEvents—云原生事件规范
  • 神经网络基础-神经网络补充概念-51-局部最优问题
  • 深度学习中,什么是batch-size?如何设置?
  • [保研/考研机试] KY26 10进制 VS 2进制 清华大学复试上机题 C++实现
  • JSP-学习笔记
  • Golang协程,通道详解
  • unity 之 Vector 数据类型
  • 私密数据采集:隧道爬虫IP技术的保密性能力探究
  • 使用git rebase 之后的如何恢复到原始状态
  • matlab相机标定知识整理
  • win11安装ubuntu 子系统安装过程及注意事项
  • torch.cat((A,B),dim=1)解析