SpringBoot上传临时文件被删除引起报错的解决
作者:程序员小强 发布时间:2022-05-28 23:46:24
上传临时文件被删除引起报错的解决
1.前言
在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天发现,导入失败报错:
location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
详见如图
2.问题分析
在SpringBoot项目启动后,系统会在‘/tmp'目录下自动的创建以下几个文件;
hsperfdata_root
tomcat.************.8080,(结尾为端口)
tomcat-docbase.*********.8080 ;
程序对上传文件操作时,会生成临时文件,暂存在临时文件目录中,经查阅资料发现CentOS有自动清理规则,系统会对/tmp下10天未使用的文件进行清理,清理后再次使用文件上传就会出现以上问题 ;
3.解决方案
3.1重启项目
启动时会自动新建临时目录的。但是以后依旧会有被系统自动清除的可能(未彻底解决)。
3.2自定义临时文件路径
新增如下配置
server.tomcat.basedir=/home/dev/temp
注意事项:
需要重启项目生效 ;
若启动项目的用户有权限在该目录下创建文件夹,则会自动创建 ;
3.2新增配置
配置类方式指定临时文件路径
@Configuration
public class MultipartConfig {
/**
* 文件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
String location = System.getProperty("user.dir") + "/dev/temp";
File tmpFile = new File(location);
if (!tmpFile.exists()) {
tmpFile.mkdirs();
}
factory.setLocation(location);
return factory.createMultipartConfig();
}
}
文件上传提示临时文件夹不存在
1.异常信息
java.io.IOException: The temporary upload location [C:\Users\Administrator\AppData\Local\Temp\tomcat.1668302398522753093.8383\work\Tomcat\loca lhost\ROOT] is not valid
2.原因
文件上传临时上传文件夹失效了,可能是系统清除了临时目录。
3.解决方法
1.重启服务,不建议在生产环境使用。
2.增加服务配置,自定义baseDir。
server.tomcat.basedir=/tmp/tomcat
3.注入bean,手动配置临时目录,建议有项目组统一配置,便于管理和错误定位。
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/tmp/tomcat");
return factory.createMultipartConfig();
}
来源:https://xqiangme.blog.csdn.net/article/details/103227572


猜你喜欢
- 详解Java读取Jar中资源文件及实现代码 &
- 一、项目简述本系统主要实现的功能有:社区疫情流动人员管理系统,住户管理,出入管理,访客管理,体温录入,高风险警示等等。二、项目运行环境配置:
- 1.Java内存模型JAVA定义了一套在多线程读写共享数据时时,对数据的可见性、有序性和原子性的规则和保障。屏蔽掉不同操作系统间的微小差异。
- 每一个应用都是具备一个功能,那就是版本更新,我记得我之前在面试的时候,面试官让我介绍一下应用版本更新的一些具体操作。我当时因为做过这个功能,
- 前言Android6.0代号棉花糖。尽管是在15年I/O大会上Google被正式发布的了。但是看看大多数人的项目中大家的 targetSdk
- 最近把以前制作的截图程序重新写了一下动了一个大手术 高质量仿照的TX的截图程序先看几个效果图拖动过程中显示当前鼠标下一小块的图像信息 尺寸、
- 本文实例为大家分享了Android PickerScrollView滑动选择控件的具体使用代码,供大家参考,具体内容如下先看一下效果图1.S
- 前言总是觉得对HashMap很熟悉,但最近连续被问到几个关于它的问题,才发现它其实并不简单。这里对关于它的一些问题做个总结,也希望能够大家一
- 本文实例为大家分享了Android实现掷骰子效果的具体代码,供大家参考,具体内容如下利用handler接受子线程的消息完成骰子点数的不断更替
- 使用字典存储事件实例accessor-declarations 的一种用法是公开很多事件但不为每个事件分配字段,而是使用字典来存储这些事件实
- 在 Java 语言中,运算符有算数运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、条件运算符。算数运算符算数运算符是我们最常用
- 一般情况下SpringBoot以Jar包的形式进行打包打包 - jar包方式1、pom文件引入插件 <build> <pl
- 本文实例讲述了Android开发之SD卡文件操作。分享给大家供大家参考,具体如下:前面的文章中写过直接操作手机自带存储器的程序,这次就接着上
- 本文实例总结了MFC程序设计常用技巧。分享给大家供大家参考。具体如下:1.属性页的添加:创建对话框的类,该类要从CpropertyPage继
- 1. 新建TestServlet类package com.yanek.test;import java.io.IOException;imp
- 嗯,就是BASE64,不用多想,本来计划是要跟上一篇字符串压缩一起写的,用来实现将一个文件可以用json或者text等方式进行接口之间的传输
- 这篇文章主要介绍了java split()使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 接收JSON浏览器传来的参数,可以是 key/value 形式的,也可以是一个 JSON 字符串。在 Jsp/Servlet 中,我们接收
- 1、基本介绍随着分词在信息检索领域应用的越来越广泛,分词这门技术对大家并不陌生。对于英文分词处理相对简单,经过拆分单词、排斥停止词、提取词干
- 概述工作电脑用了3年多了,100G的C盘也快吃不消了,每次打开看到C盘红了,总要用清理工具清理一下子.不知道怎么最近清理工具清理