我有以下遗留代码,它们用作文件上传过程的一部分。
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);
我正在重新审视此代码,我担心文件清理。鉴于FileCleaningTracker永远不会在DiskFileItemFactory中设置,我假设文件永远不会被删除,但我不清楚javadocs。具体来说,我不确定他们使用“自动”是否意味着文件清理是开箱即用的。
临时文件一旦出现就会自动删除 需要更久。 (更准确地说,当相应的实例 java.io.File是垃圾收集。)清理这些文件是通过 FileCleaningTracker的一个实例,以及一个关联的线程。
使用ServletFileUpload的正确方法是什么,FileItemFactory的类型为DiskFileItemFactory,用于解析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);