背景

今天在遇到一个问题,我用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

如图

在上传文件的时候会在这个文件的目录下生成临时文件


上传完就会立即删除

分类: java

站点统计

  • 文章总数:309 篇
  • 分类总数:19 个
  • 标签总数:191 个
  • 运行天数:1009 天
  • 访问总数:128813 人次

浙公网安备33011302000604

辽ICP备20003309号