解決springboot文件上傳提示臨時(shí)文件夾不存在問題
項(xiàng)目場(chǎng)景
附件上傳報(bào)錯(cuò):
java.io.IOException: The temporary upload location
[C:\Users\Administrator\AppData\Local\Temp\tomcat.1668302398522753093.8383\work\Tomcat\loca
lhost\ROOT] is not valid
問題描述
客戶現(xiàn)場(chǎng)服務(wù)器長(zhǎng)時(shí)間無人操作,更新系統(tǒng)后測(cè)試發(fā)現(xiàn)附件無法上傳成功。
原因分析
springBoot上傳的文件,會(huì)先緩存到本地磁盤;
為什么要緩存文件?
因?yàn)榱魅∫淮蜗M(fèi)之后,后面無法再從流中獲取數(shù)據(jù),所以緩存方便后續(xù)復(fù)用;
而緩存的路徑就是上面的路徑:/tmp/tomcat.1668302398522753093.8383
內(nèi)置的tomcat需要?jiǎng)?chuàng)建臨時(shí)目錄來存放上傳的文件,當(dāng)POST請(qǐng)求的content-type是multipart/form-data的時(shí)候就會(huì)訪問這個(gè)目錄,而這個(gè)目錄在Linux系統(tǒng)中默認(rèn)建在/tmp目錄下,10天期間,如果沒有上傳文件的需求,那這個(gè)路徑就會(huì)被linux清除,引發(fā)異常。
解決方案
- 方法一:既然目錄被刪除了,重啟一下服務(wù),讓系統(tǒng)重新生成該目錄,臨時(shí)解決(但是以后目錄還可能被刪除)
- 方法二:既然是Linux刪除的臨時(shí)路徑,可以配置一下不刪除tmp目錄下的tomcat
vim /usr/lib/tmpfiles.d/tmp.conf # 添加下面一行 x /tmp/tomcat.*
- 方法三:?jiǎn)?dòng)springBoot程序,添加使用指定臨時(shí)目錄的啟動(dòng)參數(shù)
-java.tmp.dir=/usr/tomcat/tmpfile
- 方法四:在配置文件中,自定義一個(gè)目錄,不用臨時(shí)目錄緩存上傳的文件:
server.tomcat.basedir=/data/tmpfile 或 spring.http.multipart.location=/data/tmpfile
- 方法五:在對(duì)應(yīng)服務(wù)器上創(chuàng)建該目錄
- 方法六:注入bean,手動(dòng)配置臨時(shí)目錄,建議有項(xiàng)目組統(tǒng)一配置,便于管理和錯(cuò)誤定位。
@Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("/data/tmpfile"); return factory.createMultipartConfig(); }
擴(kuò)展
如果微服務(wù)應(yīng)用了網(wǎng)關(guān),那么請(qǐng)求會(huì)首先經(jīng)過網(wǎng)關(guān),在網(wǎng)關(guān)的服務(wù)器上找這個(gè)地址
那么上面的解決方法都需要在網(wǎng)關(guān)的服務(wù)或服務(wù)器上實(shí)施
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java項(xiàng)目導(dǎo)入IDEA的流程配置以及常見問題解決方法
通常一個(gè)團(tuán)隊(duì)中可能有人用eclipse,有人用intelliJ,那么經(jīng)常會(huì)出現(xiàn)需要導(dǎo)入別人用eclipse建好的web項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目導(dǎo)入IDEA的流程配置以及常見問題解決方法的相關(guān)資料,需要的朋友可以參考下2023-05-05Open-Feign整合hystrix降級(jí)熔斷實(shí)戰(zhàn)記錄
這篇文章主要介紹了Open-Feign整合hystrix降級(jí)熔斷實(shí)戰(zhàn)記錄,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09徹底解決IDEA中SpringBoot熱部署無效的問題(推薦)
這篇文章主要介紹了徹底解決IDEA中SpringBoot熱部署無效的問題,本文給大家?guī)韱栴}原因分析通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09Spring項(xiàng)目如何實(shí)現(xiàn)帶請(qǐng)求鏈路id的日志記錄
我們?cè)谧鲰?xiàng)目的時(shí)候通常需要通過請(qǐng)求日志來排查定位線上問題,如果日志比較多而我們又需要查找整個(gè)請(qǐng)求的全部日志的時(shí)候會(huì)比較困難,下面我們就來看看如何用java aop實(shí)現(xiàn)請(qǐng)求id的日志記錄吧2024-12-12SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn)
Ribbon是一個(gè)客戶端負(fù)載均衡器,它提供了對(duì)HTTP和TCP客戶端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2019-01-01HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析
這篇文章主要介紹了HashMap底層數(shù)據(jù)結(jié)構(gòu)詳細(xì)解析,HashMap作為開發(fā)中常用的數(shù)據(jù)結(jié)構(gòu),也是面試中經(jīng)常被問的知識(shí)點(diǎn),因此作為開發(fā)者應(yīng)該盡可能多的理解其底層的數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下2023-11-11淺析java并發(fā)中的Synchronized關(guān)鍵詞
這篇文章主要介紹了java并發(fā)中的Synchronized關(guān)鍵詞,本文通過思路代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法
這篇文章主要介紹了java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法,實(shí)例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目的操作過程
這篇文章主要介紹了Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03