The temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT] is n

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/eumenides_/article/details/84066539

今天线上遇到一个问题,编辑部分表单页面保存时报错,我随便点了点,发现有的页面ok有的页面不行,不行的页面都是带图片上传的,也就是form指定了enctype=“multipart/form-data”,想了一下,生产环境两周没迭代了,没人动啊,而且还有部分数据存在呢,也是测试过的不可能出有问题,然后看了下日志:

2018-11-14 13:36:53.202 [http-nio-8082-exec-10] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - 
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 
[Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: 
Could not parse multipart servlet request; nested exception is java.io.IOException: 
The temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT]
is not valid] with root cause java.io.IOException: The temporary upload location [/tmp/tomcat.4519862041770988807.8082/work/Tomcat/localhost/ROOT] is not valid

大体看了下,从日志体现的就是有文件失效了,百度了一下查到原因了找到了,说是springboot打jar包通过java -jar启动的项目,如果上传文件会在linux的/temp/下生成一个tomcat*的文件夹,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。
解决办法:

  1. 临时的,直接重新启动项目就行,会重新建立临时文件夹
  2. 在配置文件中配置tomcat的临时目录:
	server.tomcat.basedir=/home/temp
  1. 写个配置类,通过@Bean的方式配置目录:
	/**
	 * 文件上传临时路径
	 */
	 @Bean
	 MultipartConfigElement multipartConfigElement() {
	    MultipartConfigFactory factory = new MultipartConfigFactory();
	    factory.setLocation("/home/temp");
	    return factory.createMultipartConfig();
	}

实际上还是第二种更简单,测试环境用第一种重启下拉到,生产环境用特殊紧急情况用了第一种的话,得尽快迭代(10天内),免得又给删了出毛病

猜你喜欢

转载自blog.csdn.net/eumenides_/article/details/84066539