网上都照搬的,这次我就懒一次,照搬一下了。
spring boot 请求体包含附件参数时出错:java.io.IOException: The temporary upload location
原因:
1.spring boot的应用服务在启动的时候,会生成在操作系统的/tmp目录下生成一个Tomcat.*的文件目录,用于"java.io.tmpdir"文件流操作
2.程序对文件的操作时:会生成临时文件,暂存在临时文件中;
lunix 系统的tmpwatch 命令会删除10天未使用的临时文件;
长时间不操作,导致/tmp下面的tomcat临时文件目录被删除,且删除的文件不可恢复,上传文件时获取不到文件目录,报错
解决方案:
1.重启服务,临时方案:会重新生成tomcat目录,但是生产环境不建议如此操作;
2.1增加服务配置,自定义baseDir:
server.tomcat.basedir = /xx/basedir
2.2启动时增加参数-Djava.io.tmpdir=/xx/basedir
2.3 代码指定路径
//在启动类里面添加MultipartConfigElement 配置类
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/xx/basedir");//指定临时文件路径,这个路径可以随便写
return factory.createMultipartConfig();
}
3.修改系统级配置文件
修改tmpwatch 删除文件的逻辑,系统级别的命令,不建议操作
但是可以限制删除/tmp/tomcat.*文件
https://www.cnblogs.com/frank-hui/p/9855950.html
参考:
https://blog.youkuaiyun.com/m386084855/article/details/79041621
https://blog.youkuaiyun.com/Sunny__wei/article/details/87090798