Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.7333297176951596407.9000/work/Tomcat/localhost/ROOT] is not valid。
错误原因没有找到,但是解决方案成功了。。。这很坑啊。。。
1、表现:
springboot在启动期间应该在linux的/tmp文件夹中建立/tmp/tomcat.7333297176951596407.9000/work/xx文件夹,并且centos可能会在10天左右删除这个暂存文件夹,这也是很多项目部署后报这个错误的原因。
但是经过跟踪,发现项目部署后根本没有在/tmp文件夹中新建暂存文件夹。
2、解决过程:
第一步:我添加如下代码:
/**
* 文件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation(multipartCache);
return factory.createMultipartConfig();
}
multipartCache为临时文件夹路径,初设/tmp/tomcat/cache/。
部署后发现依然报错:Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat/cache/] is not valid。
于是手动添加文件夹/tmp/tomcat/cache/,并且修改权限777,结果无效。
第二步:修改暂存地址/user/cache/tomcat,并且在代码中给予可写的权限
@Bean
MultipartConfigElement multipartConfigElement() {
File file = new File(multipartCache);
file.setWritable(true,false);
if(!file.exists()) {
file.mkdirs();
}
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation(multipartCache);
return factory.createMultipartConfig();
}
然后就成功了。。。