SpringBoot上傳臨時(shí)文件被刪除引起報(bào)錯(cuò)的解決
上傳臨時(shí)文件被刪除引起報(bào)錯(cuò)的解決
1.前言
在項(xiàng)目中使用到了SpringBoot的上傳實(shí)現(xiàn)了一個(gè)excel導(dǎo)入功能,上線后穩(wěn)得一批,但突然有一天發(fā)現(xiàn),導(dǎo)入失敗報(bào)錯(cuò):
location [/tmp/tomcat.xxx.8551/work/Tomcat/localhost/ROOT] is not valid
詳見如圖
2.問題分析
在SpringBoot項(xiàng)目啟動(dòng)后,系統(tǒng)會(huì)在‘/tmp'目錄下自動(dòng)的創(chuàng)建以下幾個(gè)文件;
- hsperfdata_root
- tomcat.************.8080,(結(jié)尾為端口)
- tomcat-docbase.*********.8080 ;
程序?qū)ι蟼魑募僮鲿r(shí),會(huì)生成臨時(shí)文件,暫存在臨時(shí)文件目錄中,經(jīng)查閱資料發(fā)現(xiàn)CentOS有自動(dòng)清理規(guī)則,系統(tǒng)會(huì)對/tmp下10天未使用的文件進(jìn)行清理,清理后再次使用文件上傳就會(huì)出現(xiàn)以上問題 ;
3.解決方案
3.1重啟項(xiàng)目
啟動(dòng)時(shí)會(huì)自動(dòng)新建臨時(shí)目錄的。但是以后依舊會(huì)有被系統(tǒng)自動(dòng)清除的可能(未徹底解決)。
3.2自定義臨時(shí)文件路徑
新增如下配置
server.tomcat.basedir=/home/dev/temp
注意事項(xiàng):
- 需要重啟項(xiàng)目生效 ;
- 若啟動(dòng)項(xiàng)目的用戶有權(quán)限在該目錄下創(chuàng)建文件夾,則會(huì)自動(dòng)創(chuàng)建 ;
3.2新增配置
配置類方式指定臨時(shí)文件路徑
@Configuration public class MultipartConfig { /** * 文件上傳臨時(shí)路徑 */ @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(); } }
文件上傳提示臨時(shí)文件夾不存在
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.原因
文件上傳臨時(shí)上傳文件夾失效了,可能是系統(tǒng)清除了臨時(shí)目錄。
3.解決方法
1.重啟服務(wù),不建議在生產(chǎn)環(huán)境使用。
2.增加服務(wù)配置,自定義baseDir。
server.tomcat.basedir=/tmp/tomcat
3.注入bean,手動(dòng)配置臨時(shí)目錄,建議有項(xiàng)目組統(tǒng)一配置,便于管理和錯(cuò)誤定位。
@Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("/tmp/tomcat"); return factory.createMultipartConfig(); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud?Gateway實(shí)現(xiàn)請求解密和響應(yīng)加密的過程解析
這篇文章主要介紹了SpringCloud?Gateway實(shí)現(xiàn)請求解密和響應(yīng)加密的相關(guān)知識(shí),本文環(huán)境使用比較新的?Java?17?和?SpringBoot?3.1.5,對應(yīng)到Spring的版本是?6.0.13,本文重心是網(wǎng)關(guān)項(xiàng)目,需要的朋友可以參考下2023-11-11如何使用Mockito調(diào)用靜態(tài)方法和void方法
這篇文章主要介紹了如何使用Mockito調(diào)用靜態(tài)方法和void方法的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Mybatis實(shí)現(xiàn)查詢相冊數(shù)據(jù)列表流程講解
這篇文章主要介紹了Mybatis實(shí)現(xiàn)查詢相冊數(shù)據(jù)列表流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12解決Spring?Security集成knife4j訪問接口文檔出現(xiàn)403的問題
這篇文章主要給大家介紹了如何解決Spring?Security集成knife4j訪問接口文檔出現(xiàn)403的問題,文中有詳細(xì)的解決方案,有需要的朋友可以參考閱讀下2023-07-07Java httpClient連接池支持多線程高并發(fā)的實(shí)現(xiàn)
本文主要介紹了Java httpClient連接池支持多線程高并發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Tomcat集群和Session復(fù)制應(yīng)用介紹
本文將詳細(xì)介紹Tomcat集群和Session復(fù)制應(yīng)用,需要了解的朋友可以參考下2012-11-11