错误原因
在 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(...)
的时候就会发现找不到父目录,才导致了以上的错误。
具体错误日志(参考)
undertow
java.nio.file.NoSuchFileException: /tmp/undertow.17753558642503713859.8085/undertow7370242804103803588upload
Tomcat
The temporary upload location [/tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost/ROOT] is not valid
重现方法
找到类 io.undertow.server.handlers.form.MultiPartParserDefinition
定位到如下代码
@Override
public void beginPar