文件上传 - 使用apache的DiskFileItemFactory和ServletFileUpload.parseRequest的正确方法

时间:2015-03-12 14:53:22

标签: java file-upload memory-leaks apache-commons-fileupload

我有以下遗留代码,它们用作文件上传过程的一部分。

    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);           

0 个答案:

没有答案