SpringBoot上传临时文件被删除引起报错

1.前言

在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天发现,导入失败报错:location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
详见如图

2.问题分析

在SpringBoot项目启动后,系统会在‘/tmp’目录下自动的创建以下几个文件;

  • hsperfdata_root
  • tomcat.************.8080,(结尾为端口)
  • tomcat-docbase.*********.8080 ;

程序对上传文件操作时,会生成临时文件,暂存在临时文件目录中,经查阅资料发现CentOS有自动清理规则,系统会对/tmp下10天未使用的文件进行清理,清理后再次使用文件上传就会出现以上问题 ;

3.解决方案

3.1重启项目

  • 启动时会自动新建临时目录的。但是以后依旧会有被系统自动清除的可能(未彻底解决)。

3.2自定义临时文件路径

新增如下配置

server.tomcat.basedir=/home/dev/temp

注意事项:

  • 需要重启项目生效 ;
  • 若启动项目的用户有权限在该目录下创建文件夹,则会自动创建 ;

3.2新增配置

  • 配置类方式指定临时文件路径 ;
@Configuration
public class MultipartConfig {

    /**
     * 文件上传临时路径
     */
    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        String location = System.getProperty("user.dir") + "/dev/temp";
        File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }
    

}

你可能感兴趣的:(SpringBoot)