Spring boot檔案上傳報錯: The temporary upload location is not valid
阿新 • • 發佈:2019-01-10
最近在做Excel匯入時,一次偶然的測試發現bug報錯如下:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\AppData\Local\Temp\tomcat.4266029690466887869.8037\work\Tomcat\localhost\ROOT] is not valid at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:86) at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:79) at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1104) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:936) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
產生問題的原因在於Spring boot專案在啟動後,系統會自動在Temp目錄下為其建立若干個目錄作為臨時資料夾。我對每份待解析的Excel檔案都是用了Paths.get(url),此方法會將檔案下載至系統的臨時資料夾中。
很遺憾,這個臨時儲存路徑已經不存在了
為什麼會被清除,暫不清楚。
解決辦法:
@Configuration public class MultipartConfig { @Bean MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory multipartConfigFactory = new MultipartConfigFactory(); String location = FileConstant.tempSavePath2; File tempFile = Paths.get(location).toFile(); if(!tempFile.exists()){ tempFile.mkdirs();// mkdirs能建立多級目錄 } multipartConfigFactory.setLocation(location); return multipartConfigFactory.createMultipartConfig(); } }