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

这篇具有很好参考价值的文章主要介绍了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层的时候:
springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException,java,spring boot,后端
进入异步方法即将执行获取输入流的时候:
springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException,java,spring boot,后端
个人想法:因为当前文件上传的业务逻辑是调用异步方法,然后直接就返回,估计接收请求的方法在返回之前,如果缓存文件没有正在被使用,框架就会将缓存文件删除。

验证:
在controller层获取输入流并且不关闭。
springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException,java,spring boot,后端

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

异步传request,即使采用传参的方式,request内部的数据也会被清空掉。猜测和文件流被清空是同一个原理。当前线程代表当前请求,当前线程结束就清空请求头。文章来源地址https://www.toymoban.com/news/detail-657818.html

到了这里,关于springboot异步文件上传获取输入流提示找不到文件java.io.FileNotFoundException的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序bindinput输入值的值获取不到

    在textarea标签中 我们用bindinput事件来获取textarea中输入的值,获取不到,且总是提示中国标准时间的黄色警告(warning) 解决这个问题的主要就是在你的value=\\\"{{MarkMessage}}\\\"前面加一个  model: 这样就可以解决  一定要在value前面加model:  

    2024年02月13日
    浏览(25)
  • SpringBoot异步任务获取HttpServletRequest

    在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案 @Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null 在使用springboot的自定

    2024年02月21日
    浏览(39)
  • 循环异步调取接口使用数组promiseList保存,Promise.all(promiseList)获取不到数组内容,then()返回空数组

    在使用 vue + vant@2.13.2 技术栈的项目中,因为上传文件的接口是单文件上传,当使用批量上传时,只能循环调取接口;然后有校验内容:需要所有文件上传成功后才能保存,在文件上传不成功时点击保存按钮,则提示信息: \\\"文件上传未成功!\\\" 。 我使用 for 循环调取接口,然

    2024年01月18日
    浏览(29)
  • Day19-异步请求-axios文件上传

    2024年02月11日
    浏览(27)
  • Spring MVC异步上传、跨服务器上传和文件下载

    之前的上传方案,在上传成功后都会跳转页面。而在实际开发中,很多情况下上传后不进行跳转,而是进行页面的局部刷新,比如:上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。 编写JSP页面,引入jQuery和jQuery表单上传工具jquery.form.js【该js文件已经

    2024年02月16日
    浏览(35)
  • c++头文件添加了提示找不到文件

    相信大家也遇到新建了一个项目,使用到一些第三方或者自己写的库或者文件之类的 在引用中明明添加了对文件或者库的路径引用,但编译的时候还是提示找不到文件。   给大家提供一个思路L: 1.查找需要引用文件在本项目中的绝对和相对路径,一般用到相对路径较多 2.查

    2024年02月01日
    浏览(57)
  • 【SpringBoot】SpringBoot获取不到用户真实IP怎么办

    项目部署后发现服务端无法获取到客户端真实的IP地址,这是怎么回事呢?给我都整懵逼了,经过短暂的思考,我发现了问题的真凶,那就是我们使用了Nginx作的请求转发,这才导致了获取不到客户端真实的IP地址,害,看看我是怎么解决的吧! 客户端请求数据时走的是Nginx反

    2024年02月12日
    浏览(29)
  • SpringBoot 使用 Maven 打包提示“程序包xxx不存在,找不到符号”错误

    在SpringBoot多模块项目中,如果使用Maven进行包管理,有时候会提示“程序包xxx不存在,找不到符号”错误,为什么会出现这个错误,我们下面先从maven打包的方式进行说起。 maven打包有三种方式 pom、jar、war。在pom.xml 文件中声明的方式分别如下: 以上三种打包方式不同出现在

    2024年02月08日
    浏览(33)
  • 电脑提示“系统找不到指定的文件”怎么办?

    “系统找不到指定的文件” 对于Windows用户来说是一个很常见的错误,尤其是Win10用户,经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码:0x80070002,但是,故障类型或代码在不同的操作系统规范上是不同的。 当您安装磁盘驱动程序、制作系统映像、

    2024年02月09日
    浏览(38)
  • Springboot获取不到nacos配置中心的配置问题

    记录一下Springboot获取不到nacos配置中心的配置问题 由于项目使用的nacos老版本,存在风险bug, 需要将nacos升级至2.2.1及以上版本,版本升级完毕之后 启动项目发现项目开始报错,提示dynamic-datasource can not find primary datasource 但是我明明在nacos中已经配置了数据源,还会出现这样的问题

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包