Java 文件上传-使用apache';s DiskFileItemFactory和ServletFileUpload.parseRequest
我有下面的遗留代码,这是作为我们的文件上传过程的一部分使用Java 文件上传-使用apache';s DiskFileItemFactory和ServletFileUpload.parseRequest,java,file-upload,memory-leaks,apache-commons-fileupload,Java,File Upload,Memory Leaks,Apache Commons Fileupload,我有下面的遗留代码,这是作为我们的文件上传过程的一部分使用 HttpServletRequest httpRequest = (HttpServletRequest) request; List<FileItem> uploadedFiles = new ArrayList<FileItem>(); try { // File size settings excluded here DiskFileItemFacto
HttpServletRequest httpRequest = (HttpServletRequest) request;
List<FileItem> uploadedFiles = new ArrayList<FileItem>();
try {
// File size settings excluded here
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
uploadedFiles = upload.parseRequest(httpRequest);
HttpServletRequest-httpRequest=(HttpServletRequest)请求;
List uploadedFiles=new ArrayList();
试一试{
//此处不包括文件大小设置
DiskFileItemFactory=新的DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
uploadedFiles=upload.parseRequest(httpRequest);
我正在重温这段代码,我担心文件清理。鉴于DiskFileItemFactory中从未设置FileCleaningTracker,我假设这些文件从未被删除,但javadocs中我并不清楚。具体地说,我不确定它们使用“自动”是否意味着文件清理是开箱即用的
临时文件一经删除,将自动删除
需要更长的时间。(更准确地说,当
java.io.File被垃圾收集。)清理这些文件由
FileCleaningTracker的实例和关联的线程
在FileItemFactory类型为DiskFileItemFactory的情况下,使用ServletFileUpload解析HttpServletRequest的正确方法是什么?我想确保没有内存泄漏
我倾向于做出以下改变,但我对这一点没有信心
HttpServletRequest httpRequest = (HttpServletRequest) request;
List<FileItem> uploadedFiles = new ArrayList<FileItem>();
try {
// File size settings excluded here
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setFileCleaningTracker(FileCleanerCleanup.getFileCleaningTracker(httpRequest.getSession().getServletContext()));
ServletFileUpload upload = new ServletFileUpload(factory);
uploadedFiles = upload.parseRequest(httpRequest);
HttpServletRequest-httpRequest=(HttpServletRequest)请求;
List uploadedFiles=new ArrayList();
试一试{
//此处不包括文件大小设置
DiskFileItemFactory=新的DiskFileItemFactory();
setFileCleaningTracker(FileCleanerCleanup.getFileCleaningTracker(httpRequest.getSession().getServletContext());
ServletFileUpload upload=新的ServletFileUpload(工厂);
uploadedFiles=upload.parseRequest(httpRequest);
您的代码是否按预期工作?