問題描述:spring boot 通過MultipartFile上傳文件,兩台電腦客戶端,今天客戶端A可以正常傳文件,而B無法傳文件,明天客戶端A則無法正常傳文件,而B可以。
結果:看錯誤是因為無臨時目錄導致上傳文件失敗,臨時文件不存在是因為linux自動清理10天未操作的臨時文件目錄,而兩個客戶端時而可以時而不可以的問題是因為,采用了兩台服務器的負載均衡,一台服務器由於10天未被分配到訪問導致臨時目錄被清理,而另一台則收到訪問臨時目錄未被清理,所以當無論哪台客戶端被分配訪問未被清理臨時目錄的服務器時都可以正常上傳文件,而另一台則無法正常上傳文件解決辦法有三種:
1 重啟項目,系統會自動重新生成該目錄
2 手動創建該目錄
3 在代碼中增加系統默認目錄配置 ,如下:
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/app/tmp");
return factory.createMultipartConfig();
}
之后你會發現會報沒有目錄的錯誤提示 ;The temporary upload location [/app/tmp] is not valid
其實上面的代碼沒有從根本上解決問題,修改如上代碼為:問題解決
@Configuration
public class MultipartConfig {
/**
* 文件上傳臨時路徑
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
String location = System.getProperty("user.dir") + "/data/tmp";
File tmpFile = new File(location);
if (!tmpFile.exists()) {
tmpFile.mkdirs();
}
factory.setLocation(location);
return factory.createMultipartConfig();
}
}
這篇文章對自動清理文件有很好的說明http://blog.51cto.com/kusorz/2051877?utm_source=oschina-app
————————————————
版權聲明:本文為CSDN博主「掉入坑中正在往上爬的猿」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lushujie_bei/article/details/89916216