springboot上传文件时500错误,提示临时目录无效

金山竹影几千秋,云索高飞水自流,万里长江飘玉带,一轮银月滚金球,
远自湖北三千里,近到江南十六州,美景一时观不透,天缘有分画中游!

错误背景:年前项目测试好之后一直在服务器上运行着,今天突然之间领导来了说不能用了,然后我上服务器看了一下日志也没有错误,但是在谷歌浏览器上却报了以下错误:

Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.157591022007816819.10201/work/Tomcat/localhost/ROOT] is not valid"
path: "/api/v0/dataset-service/dataset"
status: 500
timestamp: "2019-05-28T06:55:21.002+0000"

找了好久只发现是文件上传的报的错,看代码也没有错误,继续查询相关资料后了解到,springboot启动时会创建一个用于上传文件的临时目录,而系统会在10天后自动清除该目录。

后来在网上搜到了以下四种解决方法:

1、重启服务,重新生成目录;
2、手动创建该目录;
3、在启动服务的main方法中,添加以下代码,指定上传文件的目录:

@Bean
MultipartConfigElementmultipartConfigElement() {
MultipartConfigFactory factory =new MultipartConfigFactory(); 
 factory.setLocation("/data/apps/temp"); 
 return factory.createMultipartConfig();
}

4、在应用的配置文件中添加以下配置,原理同3:

server:
    tomcat:
        basedir: /tmp/uploadcache

接着,我进入到服务器的tmp目录,创建 /tmp/uploadcache 目录

刚才的报错显示的确实我网关的端口报的错,发现里面已经创建了多个tomcat的临时文件,我的服务创建的临时目录的端口都是8989,就是我重启的服务的端口,但是异常中的临时目录端口是10201,而10201正是zuul网关的端口。于是,我在zuul的配置文件里加上了解决方法4的配置信息,果然就好了...

个人理解:是因为Linux每十天会自动删除临时文件,由于是springcloud程序都是走的网关,我的网关一直没有动过,就是服务重启了依然会报错的原因,因为都是走的网关,所以网关临时文件删除之后,便找不到该文件,方法四配置一个固定目录后变不会再报错。

你可能感兴趣的:(springboot上传文件时500错误,提示临时目录无效)