springboot項目,部署到服務器後,運行一段時間後,處理一些文件上傳的接口時,後報異常。
Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.7333297176951596407.9000/work/Tomcat/localhost/ROOT] is not valid。
查閱資料後,發現是centos對'/tmp'下文件自動清理的原因。
在springboot項目啓動後,系統會在‘/tmp’目錄下自動的創建幾個目錄(我的項目是以下的文件夾):
1, hsperfdata_root,
2,tomcat.************.8080,(結尾是項目的端後)
3,tomcat-docbase.*********.8080。
Multipart(form-data)的方式處理請求時,默認就是在第二個目錄下創建臨時文件的。
這篇文章對自動清理文件有很好的說明http://blog.51cto.com/kusorz/2051877?utm_source=oschina-app。
處理方式:改變臨時文件的存儲路徑。如下:
@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();
}
}