SpringBoot文件上传:nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException

文件上传:Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException

分析原因

1.该异常是如何产生的, 同事在配置相关配置时发现上传文件接口报错,post请求,返回的报文如下:
{“data”:null,“errcode”:41004,“errmsg”:"{“timestamp”:“2021-02-26”,“status”:500,“error”:“Internal Server Error”,“message”:“Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp/undertow.7991771413768388182.4220/undertow1066828674196855054upload”,“timestamp”:1614332252}。 从上面的异常信息来看,是因为该目录[/tmp/undertow.7991771413768388182.4220/undertow1066828674196855054upload],不存在导致的。
2.至于为什么目录不存在:是因为在 Linux 系统中,Spring Boot 应用以 java -jar 命令启动时,会在操作系统的 /tmp 目录下生成一个 tomcat(或 undertow )临时目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时 /tmp 目录下的文件,在长时间(10天)没有使用的情况下,系统执行了 tmp 目录清理服务(systemd-tmpfiles-clean.service),导致 /tmp/undertow…8090 文件被清理,然而在上传的时候,undertow 服务器需要创建/tmp/undertow…8090/undertow…upload 临时文件,但是调用 Files.createFile(…) 的时候就会发现找不到父目录,才导致了以上的错误

解决方案

1、最简单的方法是,重启项目;
2、在application.yml文件中设置multipart location(目录自己定义) ,并重启项目;
在这里插入图片描述

3、添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值