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

Convert UploadedFile (primefaces) to FileObject (Apache Common)

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

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

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

如何将 UploadedFile (primefaces) 转换为 FileObject (Apache Common)?

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

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

很高兴提出所有建议。

也许最简单的解决方案是简单地构建一个 FileObject 的自定义实现,它接收一个 FileUpload 作为构造函数参数,提取它的 InputStream 的内容并 returns 按要求提取它们。

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

Apache Commons VFS supports many different 'virtual file systems', one of them being '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
}