当前位置: 代码迷 >> java >> Java Servlet 3.0文件上传-删除TMP文件
  详细解决方案

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

热度:56   发布时间:2023-07-18 08:57:35.0

我使用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 ,但仍然无法删除文件。

非常感谢

您(不得!)不要直接操作文件,而应使用特定PartgetInputStream()方法来获取上载文件的内容。 Servlet容器(在您的情况下为Tomcat)将-或至少应该-照顾临时文件。

InputStream.close() ,使用Part.delete()删除工作目录下存储的临时文件。 请参考 。

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

稍作更改后,始终关闭输入部分。

使用try-> catch->最终,并在最后部分放置结束,即使方法调用失败,该部分也将始终被调用。

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

  相关解决方案