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

今天线上遇到一个问题,编辑部分表单页面保存时报错,我随便点了点,发现有的页面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天内),免得又给删了出毛病

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值