背景
今天在遇到一个问题,我用swagger文档上传文件可以上传,但是用线上的页面测试就会报错,报错如下
然后找了这个项目其他的上传文件接口,无一例外全部报错
用过的方法
一 添加jvm配置
-java.tmp.dir=/data/tmpupload/code-service
二 添加jvm配置
-Djava.io.dir=/data/tmpupload/code-service
三 添加spring boot配置
http:
multipart:
max-file-size: 1000MB
max-request-size: 1000MB
# 解决临时文件上传报错
location: /data/tmpupload/barcode-service
四 添加spring boot配置
spring:
servlet:
multipart:
location: /data/tmpupload/barcode-service
五 使用配置类配置
@Configuration
public class TempFileUploadConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/data/tmpupload/code-service");
return factory.createMultipartConfig();
}
}
六 linux文件清理策略
没有试过,非必要条件下不存tmp下,为防止长期导致根目录爆了
—
七 jvm配置
-Djava.tmp.dir=/data/tmpupload/code-service
以上七种方法全部失败
解决
添加参数
-Dserver.tomcat.basedir=/data/tmpupload/code-service
一定要注意添加参数的位置,添加到jar文件后面不好使!!!!!
原因
SpringBoot项目启动后,系统默认会在 /tmp 目录下自动创建如下三个目录
hsperfdata_root,
tomcat.*******.9204,(结尾是项目的端后)
tomcat-docbase.********.9204
如图
在上传文件的时候会在这个文件的目录下生成临时文件
上传完就会立即删除