java.io.IOException: The temporary upload location [/tmp/tomcat.1XXXX] is not valid

背景

做一个简单的项目,然后在linux上部署的时候,因为需要从本地上传文件到服务器,然后在

org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/api#v1#stream] is not valid
  at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:122)

原因:
在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。

解释: /tmp文件夹的有自动cleanup机制,/tmp文件夹的文件10天未更新会被移除,/var/tmp文件夹的文件是30天。

.解决方法

新建一个

mkdir -p /tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/api#v1#stream
# 这一点修改成你启动sparing服务的机器
chown edh:edh  -R /tmp/tomcat.1428942566812653608.8090/

然后就可以了,但是后面又爆了一个相同的错误就不可以了,于是我们采用在

修改启动脚本

添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启

mkdir -p /path/to/application/temp/
# 这一点修改成你启动sparing服务的机器
chown edh:edh  -R /path/to/application/temp/

发现不可以

最后修改配置文件

spring.http.multipart.location:=/data/upload_tmp
mkdir -p /path/to/application/temp/
# 这一点修改成你启动sparing服务的机器
chown edh:edh  -R /path/to/application/temp/

这样最终测试通过

参考:
https://blog.csdn.net/fragrant_no1/article/details/83412742

https://www.cnblogs.com/756623607-zhang/p/9721761.html

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/91891664