我使用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"/>
答案 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;
}
并且对于每个多部分文件迭代,我已将转换后的文件放到列表中,在我上传完文件后,我迭代了我的列表并删除了文件。
干杯。