问题
postman调用上传文件接口返回报错
{
"timestamp": 1594206820175,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.web.multipart.MultipartException",
"message": "Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4181869668815169714.8023/work/Tomcat/localhost/ROOT] is not valid",
"path": "/**/*/**/***"
}
核心信息
Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4181869668815169714.8023/work/Tomcat/localhost/ROOT] is not valid
原因
http POST请求需要使用临时目录来存储post数据,上传的文件被接收后,也被临时存放在这个/tmp/目录下;
对于一些OS系统,像centOS将经常自动删除这个临时目录,所有导致该目录不存在了
解决方案
方案1
重启服务,让系统重新生成该目录 ;(我本地调试出现该问题时使用了这种)
方案2
手动创建该目录;
方案3
自定义目录,可以通过下面三种方式:
1、在application.yml文件中设置multipart location ,并重启项目
spring:
http:
multipart:
location: /data/upload_tmp
2、添加启动参数 -java.tmp.dir=/path/to/application/temp/
,并重启
3、在代码中增加系统默认目录配置 ,如下:
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/app/tmp");
return factory.createMultipartConfig();
}