springboot项目打包运行linux centos7下长时间不操作后图片文件上传失败的处理

本文介绍了SpringBoot内置Tomcat在Linux环境下因临时目录被清理导致上传失败的问题,以及集成百度富文本上传时遇到的类似问题。解决方法包括在配置文件中指定Tomcat临时目录,修改Linux的tmp.conf文件排除相关目录,以及针对文件上传服务的特殊处理。此外,还提供了针对tomcat-docbase.*.8000的排除规则。
摘要由CSDN通过智能技术生成

1,报错:java.io.IOException: The temporary upload location [/tmp/tomcat.3211626063131935931.9091/work/Tomcat/localhost/ROOT] is not valid

这是因为springboot内置的tomcat临时目录丢失不见,不见的原因是因为linux的机制,在打成jar启动项目后会在 /tmp/ 下创建临时目录,但是这个临时如果长时间没有访问,linux会对没有作用的文件进行清理,就导致了如上的找不到文件而导致上传失败。

解决办法:

一:在springboot项目的配置文件中指定临时目录创建地址,这样linux不会删除这种文件,如:

#添加下面一行配置 ,并且在Linux根目录下下建个/app/temp文件
server.tomcat.basedir=/usr/local/tmp

二:修改linux配置,让linux忽略该文件不进行删除,编辑tmp.conf文件

vi /usr/lib/tmpfiles.d/tmp.conf

添加如下内容:

## 新增排除目录
x /tmp/tomcat.*

即不删除tomcat开头的临时文件

2、集成百度富文本上传时,同样在一段时间不操作后也不能上传文件,显示配置文件初始化失败

通过排查发现同样是根路径找不到了,但是上面不是已经排除了吗,后来经过测试发现启动时同时还会生成另外一个文件,即 tomcat-docbase.*,当这个文件删除后富文本上传就失败了,springboot百度富文本上传接口入口处打印的根路径值为null

@ResponseBody
	public String exec(HttpServletRequest request,HttpServletResponse response) throws Exception{
		try{
			request.setCharacterEncoding("utf-8");
			response.setHeader("Content-Type" , "application/json");
//			String rootPath = request.getRealPath( "/" );
			String rootPath = request.getSession().getServletContext().getRealPath("/");
			System.out.println("rootPath::::"+rootPath);
			return new ActionEnter( request, rootPath ).exec();
		}catch(Exception e){
			throw new Exception(e);
		}

	}

如上是接口,打印rootPath有值时可以上传,为null时上传失败,为此重新更改了tmp.conf文件

## 新增排除目录
x /tmp/tomcat-docbase.*.8000

8000是项目端口号,因为只有文件上传受影响,所以其他工程还是遵循linux的规则,定期删除不用的文件,只排除文件上传服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值