Failed to parse multipart servlet request;
nested exception is java.io.IOException:
The temporary upload location
[D:\Users\name\AppData\Local\Temp\tomcat.7906663526079040174.8080\work\Tomcat\localhost\demo] is not valid
错误信息意思 : 这个临时目录 D:\Users\name\AppData\Local\Temp\tomcat.7906663526079040174.8080\work\Tomcat\localhost\demo无效,即这个目录不存在,导致文件上传失败
造成这种问题的原因:springboot启动项目时会创建一个/tmp/tomcat.7*/work/Tomcat/localhost/xxx的临时目录作为文件上传的临时目录,但是该目录会在10天之后被系统自动清理掉。当该目录被系统清理后,上传文件便会出现该问题。
解决办法:
-
重启服务
可临时避免出现该问题,一段时间后该问题还会暴露 -
在tmp目录下创建这个目录
可临时避免出现该问题,一段时间后该问题还会暴露 -
增加服务配置,自定义baseDir:
在配置文件application.properties中设置:
# springboot项目启动后,指定系统的创建目录
server.tomcat.basedir = D:/temp
在tmp目录下创建的临时目录不是固定的值
上面的异常信息中,临时目录是 D:\Users\name\AppData\Local\Temp\tomcat.7906663526079040174.8080\work\Tomcat\localhost\demo
项目每次启动,生成的临时目录不同,tomcat.7906663526079040174.8080这个值是变化的。
linux定期清理机制
参考:linux清理tmp机制
如何查找springboot的临时目录
windows系统: 默认生成的临时文件在C:\Users\姓名\AppData\Local\Temp,在此Temp文件夹下有个文件夹是tomcat.173707421065305762.8080,
这个tomcat.173707421065305762.8080就是每次启动springboot项目时默认生成的文件
当使用idea时,也可以通过命令查看,如:
springboot项目启动后,系统默认会在/tmp目录下自动创建如下三个目录
- hsperfdata_root
- tomcat.**********.8080(结尾是项目的端口)
- tomcat-docbase.*********.8080