问题:
今天在改BUG的时候,发现报错了这样一段话
Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608
这是啥呀?
有文件上传功能的springboot项目,在Linux系统部署之后(使用 java -jar运行),会在系统的tmp目录生成一个带tomcat及随机字符串的临时目录,如:/tmp/tomcat.7555554548062926924.7995/work/Tomcat/localhost/folder,
- 程序对文件的操作时:会生成临时文件,暂存在临时文件中;Linux系统的tmpwatch 命令会删除10天未使用的临时文件;长时间不进行上传操作,导致/tmp下面的tomcat临时文件目录被删除,且删除的文件不可恢复,上传文件时获取不到文件目录,导致报错。
这时候就会报错:
Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.7555554548062926924.7995/work/Tomcat/localhost/folder] is not valid"
解决方案:
1、简单粗暴,直接重启项目,让系统重新生成临时文件,就可以了。
2、在application.yml文件中设置
server
tomcat:
basedir: /tmp/tomcat
3、在application.yml文件中设置multipart location ,并重启项目
spring:
http:
multipart:
location: /data/upload_tmp
4、在配置文件添加bean
@Configurationxs
public class MultipartConfig {
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
File file = new File("/tmp/dir");
// 判断文件是否存在
if (!file.exists()){
//不存在则创建
file.mkdirs();
}
factory.setLocation("/tmp/dir");
return factory.createMultipartConfig();
}
}