解決springboot項(xiàng)目上傳文件出現(xiàn)臨時(shí)文件目錄為空的問(wèn)題
最近寫文件上傳到服務(wù)器讀取的代碼,前端使用FormData上傳,服務(wù)端用MultipartFile接收,自己測(cè)試了下MultipartFile對(duì)象有什么東西,結(jié)果一般屬性都能出來(lái),測(cè)試getInputStrea()方法的時(shí)候出現(xiàn)了以下錯(cuò)誤,簡(jiǎn)單一看這是什么目錄,從來(lái)沒見過(guò)啊:
百度一番之后發(fā)現(xiàn)了這是臨時(shí)文件存放的路徑,不清楚根據(jù)什么去放在這個(gè)目錄的,但是這個(gè)目錄本機(jī)的確沒有,linux系統(tǒng)下好像系統(tǒng)會(huì)10天清空一次,翻閱了API底下有這個(gè)
百度的時(shí)候也發(fā)現(xiàn)另外一個(gè)坑,spring配置的MaxInMemorySize配置決定會(huì)不會(huì)存成臨時(shí)文件,超過(guò)MaxInMemorySize這個(gè)大小,則會(huì)生成一個(gè)臨時(shí)文件在你的localhost文件夾下。小于這個(gè)值,則是存在內(nèi)存中,不生產(chǎn)臨時(shí)文件了,所以這個(gè)值設(shè)置小點(diǎn),報(bào)錯(cuò)也是FileNotFoundException,注意一下
有網(wǎng)友建議springboot配置tomcat臨時(shí)文件目錄,這個(gè)方法沒試,我是直接在配置類中加了一個(gè)方法,可以參考下:
@Beanpublic MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory multipartConfigFactory = new MultipartConfigFactory(); String location = System.getProperty('user.dir') + '/data/tmp'; File file = new File(location); if(!file.exists()){ file.mkdirs(); } multipartConfigFactory.setLocation(location); return multipartConfigFactory.createMultipartConfig();}
然后debug了下,發(fā)現(xiàn)getInputStream()中的path就是我設(shè)置的了:
如果設(shè)置了MaxInMemorySize大小,設(shè)置了路徑還是不行,可以把MultipartFile設(shè)置為File做操作
最后說(shuō)句,代碼不懂得一定要看API,一下子就豁然開朗了
以上這篇解決springboot項(xiàng)目上傳文件出現(xiàn)臨時(shí)文件目錄為空的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. asp(vbscript)中自定義函數(shù)的默認(rèn)參數(shù)實(shí)現(xiàn)代碼2. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)3. jsp EL表達(dá)式詳解4. jsp中sitemesh修改tagRule技術(shù)分享5. JavaWeb Servlet中url-pattern的使用6. 爬取今日頭條Ajax請(qǐng)求7. 如何使用瀏覽器擴(kuò)展篡改網(wǎng)頁(yè)中的JS 文件8. ASP基礎(chǔ)知識(shí)VBScript基本元素講解9. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)10. JSP servlet實(shí)現(xiàn)文件上傳下載和刪除
