问题描述
在生产环境,有一个SpringBoot项目在上传文件时,导致用户无法正常上传文件。
提示如下错误信息:
原因分析
- 在 Linux 系统中,Spring Boot 应用以 java -jar 命令启动时,会在操作系统的
/tmp
目录下随机生成一个 tomcat(或 undertow )临时目录,上传的文件先要转换成临时文件保存在这个文件夹中。 - 由于临时
/tmp
目录下的文件,在长时间(默认10天)没有使用的情况下,操作系统会执行 tmp 目录清理服务(systemd-tmpfiles-clean.service),导致/tmp/undertow.xxxx.xxxxxxx
文件被清理; - 导致在上传文件时,java调用 Files.createFile(…) 在目录
/tmp/undertow.xxxx.xxxxxxx
下创建临时文件时,发现找不到目录,就会抛出以上的错误。
解决方案
临时解决方案
- 可以根据报错信息,新建
/tmp/undertow.xxxx.xxxxxxxx
目录,不影响用户正常使用。 - 执行
mkdir -p /tmp/undertow.8760.570269926767628882
命令;
最终解决方案
- 在
applicaiton.yml
中手动指定上传文件的临时目录 :
spring:
servlet:
multipart:
location: /data/tmp/updateFile
手动指定目录后,必须保证该目录在服务器中存在,并有读写的权限,创建该目录 mkdir -p /data/tmp/updateFile
原文链接:https://blog.csdn.net/qq_43332570/article/details/128388996