springboot上传文件临时文件夹找不到不能成功上传问题

错误信息1:org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1220970741172837513.8080/work/Tomcat/localhost/ROOT] is not valid at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:111)

错误信息2:Failed to parse multipart servlet request;
nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException:
/tmp/undertow.3701241699676381582.32711/undertow1504003900571732622upload

原因分析:
        1、Tomcat在上传文件的时候,会先将文件上传至临时文件夹(默认情况下,tomcat 启动的时候会在 tmp 下 进行初始化临时文件夹,如果上传文件没有指定临时文件夹的位置,这个时候默认为Tomcat 的基本工作路径),由于Linux系统会定期对 tmp下的文件夹进行清除,当一旦这个目录被系统清除掉,在上传文件的时候就会导致找不到路径而报错。
注:Tomcat 在启动的时候根据 server.tomcat.basedir 指定的值(默认 tmp )下初始化 tomcat.xxxxx(上传文件临时路径);默认我们可以在tmp 下面看到很多这样的tomcat 开头的临时文件夹

         2、通过spring boot MultipartFile上传文件时,spring boot默认配置会在/tmp下创建undertow的目录,来存放中途临时上传的文件,当上传完成后将/tmp中的文件清理,但在实际工作中,一台服务器的/tmp往往很小,且一台服务器上搭载了很多应用就很容易出现磁盘空间不足的情况

Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.io.IOException: No space left on device

方案1:

在SpringBoot项目中,配置spring.http.multipart.location可以指定上传文件的临时路径。

但是,SpringBoot版本不同,关于这一块的配置也不相同。

1、Spring Boot 1.3 版本:

  multipart.location=/data/tmp

2、Spring Boot 1.4 版本和 1.5 版本:

  spring.http.multipart.location=/data/tmp

3、Spring Boot 2.0 版本:

  spring.servlet.multipart.location=/data/tmp

以上,要注意1.4、1.5版本和2.0版本的区别,不然会不起作用。

方案2:

使用配置类配置

public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    factory.setLocation(System.getProperty("/data/tmp"));
    return factory.createMultipartConfig();
}

方案3

在java启动命令中加入这个参数

-java.tmp.dir=/data/tmp

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值