登录的时候,因为无相应的临时目录导致保存临时文件时失败

c.c.d.exception.GlobalExceptionHandler : 127.0.0.1 POST /login - Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\Administrator\AppData\Local\Temp\tomcat.6219210101206260682.9999\work\Tomcat\localhost\ROOT] is not valid

这个异常的处理方式:

1、原因:由于登录的时候,因为无相应的临时目录导致保存临时文件时失败
3、 重启相应微服务自动修复的原因:启动时会自动新建相应的临时目录
4、 解决方案:如果捕获到异常属于IOException(读写异常),且在描述中存在临时目录,则新建临时目录,再次登录时即正常。 以登录界面举例:第一次登录异常,系统进行如下提醒:“因为操作系统清理了某些关键文件,导致应用软件异常,应用软件已自动修复,请再次登录!”。再次点击登录即正常。
5、 所有涉及RequestBody,MultipartFile交互方式的微服务都有可能存在类似的问题,也就是说我们所有的微服务都要加上类似的处理。
增加代码如下:
@ExceptionHandler(value = Exception.class)
@ResponseBody
public RestError handleException(HttpServletRequest request, HttpServletResponse response, Exception e) {

	logger.error("sms:"+e.getMessage());
	int startIndex = e.getMessage().indexOf("[")+1;
	int endIndex = e.getMessage().indexOf("]");
	String exceptionStr = "";
	if(startIndex!=-1&& endIndex>startIndex){
	String pathName = e.getMessage().substring(startIndex, endIndex);
	
	if(e.getCause() instanceof IOException&&pathName!=null){
	
	logger.error("pathName:"+pathName);
	if (pathName != null) {
		// 保存文件的父目录
		File parentFile = new File(pathName);
		if (!parentFile.exists()) {
			// 如果目录不存在则创建目录
			parentFile.mkdirs();
		}
	}		
	exceptionStr = "因为操作系统清理了某些关键文件,导致应用软件异常,应用软件已自动修复,请再次登录!";
	}
	}
	String requestInfo = this.getRequestInfo(request);		
	logger.error(requestInfo.concat(" - ").concat(e instanceof NullPointerException ? e.toString() : e.getMessage()), e);
	HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
	response.setStatus(status.value());
	return new RestError(status.value(), exceptionStr ==""?e.getMessage():exceptionStr, request.getRequestURI());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值