天天看點

springboot項目上傳檔案出現臨時檔案目錄為空

最近寫檔案上傳到伺服器讀取的代碼,前端使用FormData上傳,服務端用MultipartFile接收,自己測試了下MultipartFile對象有什麼東西,結果一般屬性都能出來,測試getInputStrea()方法的時候出現了以下錯誤,簡單一看這是什麼目錄,從來沒見過啊:

springboot項目上傳檔案出現臨時檔案目錄為空
百度一番之後發現了這是臨時檔案存放的路徑,不清楚根據什麼去放在這個目錄的,但是這個目錄本機的确沒有,linux系統下好像系統會10天清空一次,翻閱了API底下有這個
springboot項目上傳檔案出現臨時檔案目錄為空

百度的時候也發現另外一個坑,spring配置的MaxInMemorySize配置決定會不會存成臨時檔案,超過MaxInMemorySize這個大小,則會生成一個臨時檔案在你的localhost檔案夾下。小于這個值,則是存在記憶體中,不生産臨時檔案了,是以這個值設定小點,報錯也是FileNotFoundException,注意一下

有網友建議springboot配置tomcat臨時檔案目錄,這個方法沒試,我是直接在配置類中加了一個方法,可以參考下:

@Bean
public 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了下,發現getInputStream()中的path就是我設定的了:      
springboot項目上傳檔案出現臨時檔案目錄為空

如果設定了MaxInMemorySize大小,設定了路徑還是不行,可以把MultipartFile設定為File做操作

最後說句,代碼不懂得一定要看API,一下子就豁然開朗了
      

繼續閱讀