SpringBoot上传临时文件被删除引起报错的解决
这篇文章主要介绍了SpringBoot上传临时文件被删除引起报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
上传临时文件被删除引起报错的解决
1.前言
在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天发现,导入失败报错:
location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
详见如图
2.问题分析
在SpringBoot项目启动后,系统会在‘/tmp'目录下自动的创建以下几个文件;
程序对上传文件操作时,会生成临时文件,暂存在临时文件目录中,经查阅资料发现CentOS有自动清理规则,系统会对/tmp下10天未使用的文件进行清理,清理后再次使用文件上传就会出现以上问题 ;
3.解决方案
3.1重启项目
启动时会自动新建临时目录的。但是以后依旧会有被系统自动清除的可能(未彻底解决)。
3.2自定义临时文件路径
新增如下配置
1server.tomcat.basedir=/home/dev/temp
注意事项:
3.2新增配置
配置类方式指定临时文件路径
1@Configurationpublic
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(); }}
文件上传提示临时文件夹不存在
需要重启项目生效 ;
若启动项目的用户有权限在该目录下创建文件夹,则会自动创建 ;
hsperfdata_root
tomcat.************.8080,(结尾为端口)
tomcat-docbase.*********.8080 ;
1.前言
在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天发现,导入失败报错:
location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
详见如图
2.问题分析
在SpringBoot项目启动后,系统会在‘/tmp'目录下自动的创建以下几个文件;
程序对上传文件操作时,会生成临时文件,暂存在临时文件目录中,经查阅资料发现CentOS有自动清理规则,系统会对/tmp下10天未使用的文件进行清理,清理后再次使用文件上传就会出现以上问题 ;
3.解决方案
3.1重启项目
启动时会自动新建临时目录的。但是以后依旧会有被系统自动清除的可能(未彻底解决)。
3.2自定义临时文件路径
新增如下配置
1server.tomcat.basedir=/home/dev/temp
注意事项:
3.2新增配置
配置类方式指定临时文件路径
1@Configurationpublic
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.解决方法
需要重启项目生效 ;
若启动项目的用户有权限在该目录下创建文件夹,则会自动创建 ;
hsperfdata_root
tomcat.************.8080,(结尾为端口)
tomcat-docbase.*********.8080 ;
上传临时文件被删除引起报错的解决
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自定义临时文件路径
新增如下配置
1 | server.tomcat.basedir=/home/dev/temp |
注意事项:
需要重启项目生效 ;
若启动项目的用户有权限在该目录下创建文件夹,则会自动创建 ;
3.2新增配置
配置类方式指定临时文件路径
1 | @Configurationpublic 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。
1 | server.tomcat.basedir=/tmp/tomcat |
3.注入bean,手动配置临时目录,建议有项目组统一配置,便于管理和错误定位。
1 | @Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation( "/tmp/tomcat" ); return factory.createMultipartConfig(); } |
以上为个人经验,希望能给大家一个参考
原文链接:https://xqiangme.blog.csdn.net/article/details/103227572