小编Rei*_*unk的帖子

如何移动Primefaces-Upload-Temp-Files而不是进行时间密集的复制过程?

我想用Java EE上传大于2 GB的文件并使用primefaces.一般来说,这不是什么大问题,但我有一点问题.PrimeFaces的常用方法是上传文件,使用UploadedFile-Object,从中获取InputStream,然后将其写入磁盘.

但是写入磁盘大文件是一项耗时的任务.相反,我想在文件系统中找到上传的文件,然后将其移动到我存储所有文件的文件夹,因为移动文件不浪费时间.

所以,根据这个问题,我想出了设置PrimeFaces-Tmp文件夹和大小限制,当文件放在那里.现在每个上传的文件都直接进入该文件夹.关键是,我现在在磁盘上有一个文件,而用户正在上传 - 之后不再创建它.

到现在为止还挺好.我可以识别文件并移动它(虽然它有一个奇怪的名字).但是指向Primefaces Userguide(页187),此Tmp-Folder仅在内部使用.我甚至会从Primefaces窃取UploadedFile-Object的内容.对我来说似乎不是一个干净的解决方案.

任何提示如何实现这一目标?

我也看到了这个问题.也可能是我的头衔,但这不是我想要的.

编辑:

由于评论,一些代码.首先,我在fileUploadListener中收集UploadFile-Objects:

   public void handleFileUpload(FileUploadEvent event) throws IOException {
    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
    FacesContext.getCurrentInstance().addMessage(null, msg);

    getUploadedFilesDTO().add(new UploadedFileDTO(event.getFile(), uploadedFilesCounter));
    uploadedFilesCounter++;

}
Run Code Online (Sandbox Code Playgroud)

在EJB的第二个我为每个UploadedFile-Object调用copyFile:

private void copyFile(UploadedFile uploadedFile, String randomFilename) throws IOException {


    InputStream originalFile = uploadedFile.getInputstream();
    OutputStream fileOutput = null;

    try {
        fileOutput = new FileOutputStream("/pvtfiles/" + randomFilename);
        IOUtils.copy(originalFile, fileOutput);
    } finally {
        IOUtils.closeQuietly(fileOutput);
        IOUtils.closeQuietly(originalFile);
    }
}
Run Code Online (Sandbox Code Playgroud)

java file-upload primefaces jsf-2

5
推荐指数
1
解决办法
2994
查看次数

标签 统计

file-upload ×1

java ×1

jsf-2 ×1

primefaces ×1