删除临时文件

时间:2017-09-05 13:11:26

标签: java spring-mvc tomcat jersey multipartform-data

我使用spring mvc开发了一个rest客户端,它使用Jersey将文件和表单数据上传到休息服务。

我可以在休息客户端的Tomcat主目录中看到我上传的文件。

在获得成功回复后,如何自动删除存储在tomcat中的文件。

我的一些配置供您参考,

" web.xml"

中的多部分配置
T

在" dispatcher-servlet.xml"

中的多部分配置
  <multipart-config>
      <location>/tmp</location>
      <max-file-size>26214400</max-file-size>
      <max-request-size>31457280</max-request-size>
      <file-size-threshold>0</file-size-threshold>
  </multipart-config>

我的业务逻辑,

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。 GC删除tmp文件的最好方法是确保输入流在使用后关闭。

} finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException io) {

                }
            }
}

出于某种奇怪的原因,inputstream即使在您的休息服务执行后仍保持打开状态;这样可以防止GC收集和删除它。

答案 1 :(得分:0)

看起来问题在于将multipart文件转换为file的fileoutstream逻辑。以下是我用来解决此问题的解决方法,

我将转换逻辑替换为

public File multipartToFile(MultipartFile file) throws IllegalStateException, IOException 
    {

        File tmpFile = new File(System.getProperty("user.dir") + File.separator + file.getOriginalFilename());
        file.transferTo(tmpFile);
        return tmpFile;
    }

并且对于每个多部分文件迭代,我已将转换后的文件放到列表中,在我上传完文件后,我迭代了我的列表并删除了文件。

干杯。