org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request.【解决】
1、背景描述搭建的文件服务器,过一段时间后再上传文件会报错,上传文件前端报跨域问题,重...
1、背景描述
搭建的文件服务器,过一段时间后再上传文件会报错,上传文件前端报跨域问题,重启一下服务就又好了,一直没管它每次出现问题就重启。今天又报错了,开始查找原因,用Postman调试了一下上传接口,结果报的是500错误,这一看问题就大了不是前端报的跨区问题,看了一下日志报如下错误。
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608.93/work/Tomcat/localhost/ROOT] is not valid
二、异常分析
从上述报错信息来看,翻译过来内容是指:临时上传位置无效。这个临时位置是哪里来的,为什么会有临时位置这一说法。
1、对于HTTP POST请求来说,它需要一个临时目录来存储POST数据。
2、因为该目录是放到temp文件夹下的一个临时目录,对于一些操作系统来讲,会经常删除临时内容的,所以这个内容就不存在了,导致上述报错信息说临时上传位置无效的结果。
三、解决方案
以下是汇总的几种解决办法,根据个人喜欢可用不同的方法。
方案一:重启本项目(临时解决)
我是懒省事儿,重启本项目,然后就解决这个问题了。
方案二:修改配置文件( application.properties 或 .yml 配置文件)
方式1: 改变tomcat 的基本工作目录所在位置,不放在tmp文件下;统一指定 server.tomcat.basedir=${user.home}/tomcat_upload (好处是:项目启动的时候会自动创建)
server.tomcat.basedir=${user.home}/tomcat_upload_temp
方式2:适用于一些版本旧的项目,目前我知道的是spring boot 2.0.1以下版本
spring.http.multipart.location=${user.home}/data/tomcat_upload_temp
方式3:适用于一些新版本的项目,通常是spring boot 2.0.1以上的版本
spring.servlet.multipart.location=${user.home}/data/tomcat_upload_temp
注①:
采用方案二中:方式2、方式3时 如果指定的位置不存在 则需要手动去创建。当然你可以用java config 来实现(好处是:当配置的路径不存在时,可以自动的去创建它)
注②:
如果尝试上面三种方式无效,没有正确的创建文件夹。那就得检查一下自己的配置类,看是否有自己的实现,有自己的Tomcat相关配置,如果有自己的配置类在yml下添加就无效了,在自己配置类中补充相关配置即可。
方案三:添加项目启动参数
-java.tmp.dir= ${user.home}/data/tomcat_upload_temp
参考:
https://blog.csdn.net/kellypipe/article/details/104535076
https://blog.csdn.net/weixin_44299027/article/details/107100903
更多推荐
所有评论(0)