关于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 。

完成,留个记录。

相关推荐
benbenAItalk5 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl5 小时前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885725 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户5 小时前
Java锁
java·开发语言
shehuiyuelaiyuehao7 小时前
1计算机是如何工作的
java·计算机网络
letisgo58 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周8 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8448 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘9 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言