SpringBoot上傳臨時文件被刪除引起報錯的解決
上傳臨時文件被刪除引起報錯的解決
1.前言
在項目中使用到了SpringBoot的上傳實現(xiàn)了一個excel導(dǎo)入功能,上線后穩(wěn)得一批,但突然有一天發(fā)現(xiàn),導(dǎo)入失敗報錯:
location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
詳見如圖

2.問題分析
在SpringBoot項目啟動后,系統(tǒng)會在‘/tmp'目錄下自動的創(chuàng)建以下幾個文件;
- hsperfdata_root
- tomcat.************.8080,(結(jié)尾為端口)
- tomcat-docbase.*********.8080 ;
程序?qū)ι蟼魑募僮鲿r,會生成臨時文件,暫存在臨時文件目錄中,經(jīng)查閱資料發(fā)現(xiàn)CentOS有自動清理規(guī)則,系統(tǒng)會對/tmp下10天未使用的文件進(jìn)行清理,清理后再次使用文件上傳就會出現(xiàn)以上問題 ;
3.解決方案
3.1重啟項目
啟動時會自動新建臨時目錄的。但是以后依舊會有被系統(tǒng)自動清除的可能(未徹底解決)。
3.2自定義臨時文件路徑
新增如下配置
server.tomcat.basedir=/home/dev/temp
注意事項:
- 需要重啟項目生效 ;
- 若啟動項目的用戶有權(quán)限在該目錄下創(chuàng)建文件夾,則會自動創(chuàng)建 ;
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.原因
文件上傳臨時上傳文件夾失效了,可能是系統(tǒng)清除了臨時目錄。
3.解決方法
1.重啟服務(wù),不建議在生產(chǎn)環(huán)境使用。
2.增加服務(wù)配置,自定義baseDir。
server.tomcat.basedir=/tmp/tomcat
3.注入bean,手動配置臨時目錄,建議有項目組統(tǒng)一配置,便于管理和錯誤定位。
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/tmp/tomcat");
return factory.createMultipartConfig();
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中使用redis并且執(zhí)行調(diào)試lua腳本
今天有個項目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Java實戰(zhàn)項目之斗地主和斗牛游戲的實現(xiàn)
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個斗地主和一個斗牛游戲,大家可以在過程中查缺補漏,提升水平2021-11-11
基于OAuth2.0授權(quán)系統(tǒng)的驗證碼功能的實現(xiàn)
本篇教程給大家分享基于OAuth2.0授權(quán)系統(tǒng)的驗證碼功能的實現(xiàn),驗證碼功能的實現(xiàn)是采用Zuul網(wǎng)關(guān)的Filter過濾器進(jìn)行校驗驗證碼,具體實現(xiàn)代碼跟隨小編一起看看吧2021-05-05
詳解Spring Data JPA動態(tài)條件查詢的寫法
本篇文章主要介紹了Spring Data JPA動態(tài)條件查詢的寫法 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06

