SpringBoot上傳臨時文件被刪除引起報錯的解決
上傳臨時文件被刪除引起報錯的解決
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(); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot臨時文件存儲目錄配置方式
- SpringBoot項目 文件上傳臨時目標被刪除異常的處理方案
- 解決SpringBoot文件上傳臨時目錄找不到的問題
- 如何使用@ConditionalOnExpression決定是否生效註釋
- Spring boot實現上傳文件到本地服務器