将UploadedFile(primefaces)转换为FileObject(Apache Common)

时间:2019-03-23 12:54:15

标签: file-upload primefaces type-conversion apache-commons-vfs

我正在使用primefaces组件上传文件。

   public void handleFileUpload(FileUploadEvent event) {
      UploadedFile file = event.getFile();
   }

为了使应用程序进一步发展,我有一个必须使用的库提供的功能。此函数仅接受FileObject作为输入参数。

我如何将UploadedFile(原始字符)转换为FileObject(Apache Common)?

一种解决方法是将UploadedFile转换为文件,然后使用VFS.getManager()及其功能将文件转换为FileObject。但是要做到这一点,我将不得不将文件保存在服务器上,并稍后再将其删除。

我正在寻找一种方法,可以将UploadedFile直接转换为FileObject。也许首先将其转换为字节数组?

很高兴获得所有建议。

2 个答案:

答案 0 :(得分:1)

Apache Commons VFS supports many different 'virtual file systems',其中之一是'RAM',它不需要存储在基于真实磁盘的文件(系统)中

您可以像这样使用它(免责声明:未经测试)

public void handleFileUpload(FileUploadEvent event) {

    UploadedFile file = event.getFile();

    FileObject ram = VFS.getManager().resolveFile("ram:"+file.getFileName());
    OutputStream os = ram.getContent().getOutputStream();
    os.write(file.getContents());
    ram.getContent().close();

    // Use the ram FileObject
}

答案 1 :(得分:0)

也许最简单的解决方案是简单地构建FileObject的自定义实现,该实现将FileUpload接收为构造函数参数,提取其InputStream的内容并按要求返回。

查看documentation以了解所需的方法。