关于SpringBoot在MultipartFile上java.nio.file.NoSuchFileException: /tmp/undertow

SpringBoot在使用MultipartFile上报错java.nio.file.NoSuchFileException: /tmp/undertow

先描述问题

通过Controller接收文件参数,service层进行处理。结果,万万没想到,在service中报了一个错,就找不到文件。

java 复制代码
java.nio.file.NoSuchFileException: /tmp/undertow.9606.4021149120358029507

看到这个异常NoSuchFileException后就一脸懵逼,我明明测试通过的,怎么部署上服务器就不行了!!!

怀疑临时路径问题,但查看配置的临时路径都是OK的,几经波折测试分析发现可能是异步处理问题。

Controller中接收MultipartFile file :

service中异步方法,业务使用file对象会报NoSuchFileExceptio:

java 复制代码
java.nio.file.NoSuchFileException: /tmp/undertow.9606.4021149120358029507

原因:

因为使用的是异步方法,这样就会有一个主线程和一个异步线程。在上传文件后会形成MultipartFile类型的实例,同时生成临时文件,此时是在主线程中。MultipartFile的实例交给异步线程处理后,该临时文件会被springboot(spring)销毁,在异步线程中去getInputStream就会出现上面的异常。

而在下面的写法是将文件流作为了入参,就不会产生找不到文件的情况。

处理:service不要直接用MultipartFile,而使用InputStream 参数来接收。

Controller中,转InputStream 。

service中,接收InputStream 。

完成,留个记录。

相关推荐
缓慢更新1 小时前
审批的加签与会签:多人意见怎么合
android·java·数据库·低代码·rxjava
yuniko-n2 小时前
【JUC】volatile 非原子性深入解析
java
sun_weitao2 小时前
极简版 MCP 工具实现方案
java·linux·服务器
金銀銅鐵4 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
布吉岛的石头4 小时前
Java 程序员第 50 阶段3:数据工程:预训练语料清洗与去重
java·开发语言·人工智能·深度学习·transformer
大文说跨境4 小时前
防关联浏览器的指纹覆盖到什么程度:六类参数的实测与自检方法
java·指纹浏览器·tiktok运营
Carol06305 小时前
上肢及肩肘关节
java·服务器·数据库
yliucherish5 小时前
Log4Shell 复现实录:我读 OpenJDK 源码,发现两道防线的默认值竟然相反
java
维拉德5 小时前
Java新人第一次接打标需求:从抓包找接口到客户端展示
java
luobobo8965 小时前
支付回调验签连续失败三天,最后发现是网关的时间戳单位问题
java