Commons FileUpload如何在存储库中放置超过磁盘项工厂内存阈值的文件?

时间:2016-05-24 05:26:48

标签: java apache-commons-fileupload

我的印象是,如果使用Apache Commons FileUpload API上传的文件超过Disk Item Factory对象声明/设置的内存阈值,它将进入存储库,暂时存储这些文件。我的问题是它如何将这些文件放入存储库?

这是我测试场景的代码

if (ServletFileUpload.isMultipartContent(request)) {
    DiskFileItemFactory diskFactory = new DiskFileItemFactory();
    ServletFileUpload uploadHandler = new ServletFileUpload(diskFactory);
    diskFactory.setRepository(new File("/home/test/bin"));
    diskFactory.setSizeThreshold(5120);

    try {
        List<FileItem> fileList = uploadHandler.parseRequest(request);

        for (FileItem file : fileList) {
            if (!file.isFormField()) {
                String name = new File(file.getName()).getName();
                file.write(new File(
                    request.getServletContext().getInitParameter("UploadPath")
                    + File.separator + name));
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}        

我将内存阈值设置为5KB并尝试上传13KB文件。我的预期结果,它将被放在/home/test/bin目录中。但它被放置在我为成功上传而创建的上传目录路径中。

1 个答案:

答案 0 :(得分:0)

它位于成功的上传路径上,因为您正在执行:file.write(new File(request.getServletContext().getInitParameter("UploadPath") + File.separator + name));

但是,库会自动删除临时文件...请参阅&#34;资源Clenaup&#34;在fileupload user-guide