定制软件开发org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request.【解决】...

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

参考:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发