Java Servlet 3.0文件上载 - 删除TMP文件

时间:2015-07-31 08:23:45

标签: java tomcat servlets

我使用Java Servlet 3.0上传文件,使用@MultipartConfig注释和request.getParts()来获取文件。

上载文件时,会在Web应用程序工作目录(tomcat/work/Catalina/localhost/webappname)中创建TMP文件。例如:

upload_7c59101b_9f97_4e3f_9fa5_e484056d26fa_00000209.tmp

应用程序将文件复制到服务器上的另一个目录 - 我使用part.write()方法执行此操作,但它也通过获取输入流和写入字节来工作。无论哪种方式都可以。

我需要在上传后删除TMP文件,但我在执行此操作时遇到了问题。 part.delete()方法无法执行任何操作。我还尝试使用javax.servlet.context.tempdir访问目录中的文件并迭代它们以进行删除,但是当调用delete方法时,它总是返回false。使用Files.delete(path)中的Files.nio方法返回一个异常,该异常声称该文件正由另一个程序使用(即已锁定),因此无法删除。服务器正在运行Windows Server 2012 R2。

有没有人有任何其他解决方案来删除这些TMP文件?值得指出的是,我也尝试使用HttpRequestListener,但仍无法删除文件。

非常感谢

2 个答案:

答案 0 :(得分:2)

您应该(必须!)不直接操作文件,您应该使用特定getInputStream()的{​​{1}}方法来获取上传文件的内容。

答案 1 :(得分:0)

我同意Jozef Chocholacek的回答,简单的解决方案CLOSE输入。 我们使用MultiPart消息上传文件。 由于我们没有关闭inputStream,因此将文件存储在那里一段时间。它们仅在服务器重启时被删除。

稍微改变实现后总是关闭输入部分。

  

使用try-> catch->最后,并将结束最终部分   即使方法调用失败,也总是调用。

服务器不再存储.tmp文件。