最近在做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();
}
}