最近寫文件上傳到服務器讀取的代碼,前端使用FormData上傳,服務端用MultipartFile接收,本身測試了下MultipartFile對象有什麼東西,結果通常屬性都能出來,測試getInputStrea()方法的時候出現瞭如下錯誤,簡單一看這是什麼目錄,歷來沒見過啊:前端
百度一番以後發現了這是臨時文件存放的路徑,不清楚根據什麼去放在這個目錄的,可是這個目錄本機的確沒有,linux系統下好像系統會10天清空一次,翻閱了API底下有這個linux
百度的時候也發現另一個坑,spring配置的MaxInMemorySize配置決定會不會存成臨時文件,超過MaxInMemorySize這個大小,則會生成一個臨時文件在你的localhost文件夾下。小於這個值,則是存在內存中,不生產臨時文件了,因此這個值設置小點,報錯也是FileNotFoundException,注意一下spring
有網友建議springboot配置tomcat臨時文件目錄,這個方法沒試,我是直接在配置類中加了一個方法,能夠參考下: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就是我設置的了:
若是設置了MaxInMemorySize大小,設置了路徑仍是不行,能夠把MultipartFile設置爲File作操做springboot
最後說句,代碼不懂得必定要看API,一會兒就豁然開朗了