问题描述
项目运行了一段时间,上传文件,突然报错误,一时间慌了神,立马问百度,恍然大悟。
The temporary upload location
[C:\Users\test\AppData\Local\Temp\tomcat.8083403186712289847.8080\work\Tomcat\localhost\ROOT] is not valid
- Tomcat在上传文件的时候,会先将文件上传至临时文件夹(默认情况下,tomcat 启动的时候会在 tmp 下
进行初始化临时文件夹,如果上传文件没有指定临时文件夹的位置,这个时候默认为Tomcat 的基本工作路径),由于Linux系统会定期对tmp 下的文件夹进行清除, 而一旦这个目录被系统清除掉,在上传文件的时候就会导致找不到路径 而报错; - springboot内嵌tomcat,上传文件时会存放到tomcat临时文件目录,如:C:\Users\test\AppData\Local\Temp\tomcat.8083403186712289847.8080\work\Tomcat\localhost\ROOT。
- springboot项目自动删除了临时文件,而且部署在linux上的项目,linux系统会定时清理/tmp目录下的内容,一般为10天。
解决方案
- 重启项目,可临时解决,但过段时间又会出现
- 在application.properties文件中,指定上传文件的临时路径,即multipart location ,并重启项目
spring. http.multipart.location= /data/upload_tmp
- 在application.properties文件中,设置tomcat 的基本工作目录
#不能与multipart.location同时设置
server.tomcat.basedir=/tmp/tomcat
- 在配置文件添加bean
@Configuration
public class MultipartConfig {
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/"); //自定义路径
return factory.createMultipartConfig();
}
}
- 添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启
nohup java -jar filemanage.jar -java.tmp.dir=/data/temp &