【问题标题】:While uploading a file, getting "Could not delete file C:\Users\..." error上传文件时,出现“无法删除文件 C:\Users\...”错误
【发布时间】:2016-04-12 16:51:59
【问题描述】:

我正在为我的应用程序使用 spring boot 和 mysql。当我尝试上传文件时,它会显示如下所示的错误消息,

java.io.IOException: UT010015: Could not delete file C:\Users\KARTHI~1\AppData\Local\Temp\undertow7745669140970195692upload
	at io.undertow.servlet.spec.PartImpl.delete(PartImpl.java:111)
	at org.springframework.web.multipart.support.StandardServletMultipartResolver.cleanupMultipart(StandardServletMultipartResolver.java:86)
	at org.springframework.web.servlet.DispatcherServlet.cleanupMultipart(DispatcherServlet.java:1104)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:989)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)
	at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:295)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)

我的编码是,

<form method="POST" enctype="multipart/form-data" action="http://localhost:8080/surf/upload">
File to upload: <input type="file" name="file"><br /> Name: <input
			type="text" name="name"><br /> <br /> <input type="submit"
			value="Upload"> Press here to upload the file!
</form>

还有我的java类

 @RequestMapping(value="/upload", method=RequestMethod.POST)
 public @ResponseBody String handleFileUpload(@RequestParam("name") String name,
	        @RequestParam("file") MultipartFile file){
	        if (!file.isEmpty()) {
	            try {
	                byte[] bytes = file.getBytes();
	                BufferedOutputStream stream =
	                        new BufferedOutputStream(new FileOutputStream(new File("D:/Test/surfImg/")));
	                stream.write(bytes);
	                stream.close();
	                return "You successfully uploaded " + name + "!";
	            } catch (Exception e) {
	                return "You failed to upload " + name + " => " + e.getMessage();
	            }
	        } else {
	            return "You failed to upload " + name + " because the file was empty.";
	        }
	    }

【问题讨论】:

  • 你有管理员权限吗?也许就是这样。因为它在用户文件夹中
  • @Tupac 是的,我只与管理员联系。

标签: java spring spring-mvc spring-boot multipartform-data


【解决方案1】:

这似乎是在 Spring Boot 上下文中讨论的 Undertow (UNDERTOW-542) 中的一个错误 here。引用analysis of Andy Wilkinson

好消息是异常是良性的,您可以放心地忽略它。它只是告诉您,尽管非常嘈杂,但无法删除该文件,因为它已经被删除了。原因是 Undertow 中存在竞争条件,这意味着两个线程最终会尝试同时删除文件。

[...]

这已在 Undertow 1.3 和 1.2 中修复。 Spring Boot 1.3 使用 Undertow 1.3,所以我们很好。不幸的是 Spring Boot 1.2 使用了 Undertow 1.1,所以我们只能忍受那里的良性警告。

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 1970-01-01
    • 2021-04-30
    • 2023-01-16
    • 2018-09-16
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多