前言
今天用到了项目的图片上传,发现之前好好的图片上传,今天突然传不上去了,记录一下解决过程。
问题
图片传不上去后,查看了一下日志报错,报错信息如下:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.4672945261796810162.80/work/Tomcat/localhost/ROOT] is not valid
原因
在Linux上,Spring Boot程序在不配置application.properties配置文件中的server.tomcat.basedir
属性值的时候,启动时会在/tmp
文件夹下创建两个临时文件夹,为tomcat.数字.你的后端端口号
和tomcat-docbase.数字.你的后端端口号
在文件上传时,上传的文件先要转换成临时文件保存在tomcat.数字.端口号
这个文件夹下边,而在Centos中,默认情况下,系统会删除/tmp
目录下十天没有使用的文件,删除文件后,就出现了上边的错误,并且文件上传失败。
这也就解释了为什么之前好好的图片上传,几天不用突然报错了。
解决
若想解决此错误,可以直接重启项目,因为项目重启后又会自动生成对应的这两个文件夹,但是指标不治本,十天不用之后还是会报错。
建议采用的解决办法:
在项目的properties
配置文件中加入server.tomcat.basedir=路径
即可
我的是server.tomcat.basedir=/root/blog/tmp
这样配置了上传文件的临时路径,我们就不会去采用默认的tomcat.xxxx.端口号这个文件夹保存上传图片的临时文件,也不用担心被Centos误删了。
除此之外,还可以更改Centos系统设置,设置不定期清理这些文件,具体方法可以百度。
大致就是在一些系统配置文件中加上如下代码: