gpt4 book ai didi

java - 分段上传 Servlet 3.0 - 临时文件不删除

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:35 25 4
gpt4 key购买 nike

我有一个上传 servlet,它运行良好,但留下了临时文件。我正在尝试使用 part.delete() 来清理它们,但它们并没有删除。

文档说容器在执行 GC 时会删除它们。但即使我等了一个小时并最终关闭了服务器,它们仍然存在......

有什么技巧?目前是 Windows 上的 Eclipse Kepler 和 Tomcat 7.0.47。但生产环境将是 Linux。

谢谢

代码大幅压缩:

@MultipartConfig(location = "C:/tmp",
fileSizeThreshold=1024*1024*10, // 10MB
maxFileSize=1024*1024*10, // 10MB
maxRequestSize=1024*1024*50) // 50MB
@WebServlet("/upload.do")

...

for (Part part : request.getParts()) {
String filename = getFilename(part);
if(!(filename==null)){
part.write("/elsewhere/"+filename);
part.delete();
} else {
out.println("skip field...");
}
}

最佳答案

您好,您可以像这样创建 Servlet Listner

 @WebListener
public class ContextListner implements ServletRequestListener, ServletContextListener {

public ContextListner() {

}

public void requestDestroyed(ServletRequestEvent sre) {
deleteDir(sre.getServletContext().getRealPath("") + File.separator + UploadConstants.TEMP_DIR);
}

public void contextInitialized(ServletContextEvent sce) {

}

public void contextDestroyed(ServletContextEvent sce) {
deleteDir(sce.getServletContext().getRealPath("") + File.separator + UploadConstants.TEMP_DIR);
}

public void requestInitialized(ServletRequestEvent sre) {

}

private void deleteDir(final String dirPath) {

if (null == dirPath)
return;

File dir = new File(dirPath);
if (dir.exists() && dir.isDirectory()) {
File[] files = dir.listFiles();
if (null != files) {
for (File file : files) {
file.delete();
}
}
}

}

}

并使用下面提到的注释标记您的 servlet。

@WebListener(value = "ContextListner")

这将删除临时目录或您指定目录下的临时文件。

 public void requestDestroyed(ServletRequestEvent sre) {
deleteDir(sre.getServletContext().getRealPath("") + File.separator + UploadConstants.TEMP_DIR);
}

此方法在响应发送回客户端后调用。

关于java - 分段上传 Servlet 3.0 - 临时文件不删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20908446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com