1、原因分析
问题:开发中遇到一个springboot的异常,Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/data/tmp],奇怪的是服务器上传没有任何问题,只有在我本地上传会报这个错
原因:从报错的信息来看是缺少 ‘/data/tmp’目录导致的
分析:因为我是mac电脑,没有权限在根目录下创建文件夹,所以会报这个错,而服务器上是root权限,可以自动去创建
2、解决方案
对此问题我也在网上找了几种方案:
2.1、增加配置文件指向临时目录
2.1.1、在application.yml文件中设置multipart location ,并重启项目
spring:
servlet:
multipart:
location: /tmp/uploads
我看有的博客的配置是:
spring:
http:
multipart:
location: /data/upload_tmp
这个配置我使用了是没用的,因为application.yaml
中配置 Spring Boot 的 multipart 上传目录时,使用的是 spring.servlet.multipart.location。如果配置中是 spring.http.multipart.location,这会导致配置无法生效。
2.1.2 在application.yml文件中设置tomcat的临时文件目录
server
tomcat:
basedir: /tmp/tomcat
2.2 在配置文件添加bean
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/tmp/tomcat");
return factory.createMultipartConfig();
}
2.3 添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启
本人是用 2.1.1 方案解决的,因为可以在不改动代码以及启动配置文件实现。