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
詳見(jiàn)如圖

2.問(wèn)題分析
在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ì)對(duì)/tmp下10天未使用的文件進(jìn)行清理,清理后再次使用文件上傳就會(huì)出現(xiàn)以上問(wè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)文章
springboot中使用redis并且執(zhí)行調(diào)試lua腳本
今天有個(gè)項(xiàng)目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
微信公眾帳號(hào)開(kāi)發(fā)教程之圖文消息全攻略
本篇主要介紹微信公眾帳號(hào)開(kāi)發(fā)中圖文消息的使用,以及圖文消息的幾種表現(xiàn)形式。標(biāo)題取名為"圖文消息全攻略",這絕對(duì)不是標(biāo)題黨,是想借此機(jī)會(huì)把大家對(duì)圖文消息相關(guān)的問(wèn)題、疑慮、障礙全部清除掉。2016-12-12
Java實(shí)戰(zhàn)項(xiàng)目之斗地主和斗牛游戲的實(shí)現(xiàn)
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)斗地主和一個(gè)斗牛游戲,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
java開(kāi)發(fā)中防止重復(fù)提交的幾種解決方案
我們?nèi)粘i_(kāi)發(fā)中有很多的應(yīng)用場(chǎng)景都會(huì)遇到重復(fù)提交問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于java開(kāi)發(fā)中防止重復(fù)提交的幾種解決方案,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn)
本篇教程給大家分享基于OAuth2.0授權(quán)系統(tǒng)的驗(yàn)證碼功能的實(shí)現(xiàn),驗(yàn)證碼功能的實(shí)現(xiàn)是采用Zuul網(wǎng)關(guān)的Filter過(guò)濾器進(jìn)行校驗(yàn)驗(yàn)證碼,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-05-05
詳解Spring Data JPA動(dòng)態(tài)條件查詢的寫(xiě)法
本篇文章主要介紹了Spring Data JPA動(dòng)態(tài)條件查詢的寫(xiě)法 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06

