背景
做一个简单的项目,然后在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