java.io.IOException: The temporary upload location [/tmp/tomcat.xxx.xxx/work/Tomcat/localhost/ROOT]

在Linux环境中,SpringBoot项目进行文件上传时,由于tmp目录下的Tomcat临时文件被tmpwatch命令删除,导致上传失败,表现为Failedtoparsemultipartservletrequest异常。解决方案包括重启项目、修改配置以指定新的临时文件路径或multipart存储位置,或者通过添加自定义MultipartConfigElement来设定上传目录。

问题:

  今天在改BUG的时候,发现报错了这样一段话

  Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608

  这是啥呀?

有文件上传功能的springboot项目,在Linux系统部署之后(使用 java  -jar运行),会在系统的tmp目录生成一个带tomcat及随机字符串的临时目录,如:/tmp/tomcat.7555554548062926924.7995/work/Tomcat/localhost/folder,

  • 程序对文件的操作时:会生成临时文件,暂存在临时文件中;Linux系统的tmpwatch 命令会删除10天未使用的临时文件;长时间不进行上传操作,导致/tmp下面的tomcat临时文件目录被删除,且删除的文件不可恢复,上传文件时获取不到文件目录,导致报错。

 这时候就会报错:

Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.7555554548062926924.7995/work/Tomcat/localhost/folder] is not valid"

解决方案: 

1、简单粗暴,直接重启项目,让系统重新生成临时文件,就可以了。

2、application.yml文件中设置

server
  tomcat:
     basedir: /tmp/tomcat

3、application.yml文件中设置multipart location ,并重启项目

spring:
  http:
    multipart:
      location: /data/upload_tmp

4、在配置文件添加bean

@Configurationxs
public class MultipartConfig {

    
    @Bean
    public MultipartConfigElement multipartConfigElement(){
        MultipartConfigFactory factory = new MultipartConfigFactory();
        File file = new File("/tmp/dir");
//        判断文件是否存在
        if (!file.exists()){
            //不存在则创建
            file.mkdirs();
        }
        factory.setLocation("/tmp/dir");
        return factory.createMultipartConfig();
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值