File upload 将上载的文件(primefaces)转换为FileObject(Apache Common)

File upload 将上载的文件(primefaces)转换为FileObject(Apache Common),file-upload,primefaces,type-conversion,apache-commons-vfs,File Upload,Primefaces,Type Conversion,Apache Commons Vfs,我正在上传一个使用primefaces组件的文件 public void handleFileUpload(FileUploadEvent event) { UploadedFile file = event.getFile(); } 为了应用程序的进一步开发,我必须使用一个库中提供的函数。此函数仅接受FileObject作为输入参数 如何将上载的文件(primefaces)转换为FileObject(Apache Common) 解决方法是将上载的文件转换为文件,然后

我正在上传一个使用primefaces组件的文件

   public void handleFileUpload(FileUploadEvent event) {
      UploadedFile file = event.getFile();
   }
为了应用程序的进一步开发,我必须使用一个库中提供的函数。此函数仅接受FileObject作为输入参数

如何将上载的文件(primefaces)转换为FileObject(Apache Common)

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

我正在寻找一种方法,可以将上传的文件直接转换为FileObject。也许先把它变成一个bytearray


很高兴听到大家的建议。

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

查看以了解所需的方法。

Apache Commons VFS,其中一种方法不需要存储在真正的基于磁盘的文件(系统)中

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


UploadFIle同时具有getInputStream()和getContents()方法,它们返回字节数组或流。然而,要将其转换为文件,您必须使用FileInputStream或其他方法,但所有这些都意味着首先将其写入磁盘。我不确定有没有一种简单的方法可以在没有操作系统文件支持的情况下创建文件对象。@Melloware:您可以创建一个文件对象,而操作系统上没有真实的文件,它只是没有任何数据;-)。在我看来,FileObject总是需要“VFS”支持的支持。如果您检查,您可以看到哪些是受支持的。有一个“随机存储器”可供选择
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
}