如何在Rust中创建虚拟文件系统?

时间:2016-10-15 09:22:10

标签: linux windows rust virtualfilesystem

我正在开发一个应用程序,它应该通过网络挂载文件夹。它应该与SMB安装的文件夹类似,只是服务器不使用SMB协议。它类似于:服务器A是一个HTTP服务器,它包含文件,而客户端B应该能够挂载这些文件,直接能够访问它们而无需先下载它们(流式传输)。因此,客户端应该能够流式传输文件,即在任意位置访问文件。存储在服务器A上的文件也以特定方式进行编码,压缩,加密和打包,因此在将它们呈现给虚拟文件系统之前,我需要解码它们(进行一些内部处理)。客户端应具有只读访问权限。我希望客户端可以在Windows和Linux上使用。它应该是这样的:

客户端已安装了一个文件夹,并希望访问位于1248989的/virtualfolder/data.file。存储在服务器上的数据被分成任意长度的块(假设它是1兆字节)。然后我需要下载对应于字节1000000-1999999的文件部分,解码它们,缓存它们然后用户可以访问这些数据。

当然我的解码过程是在内部完成的,我只需要一个API来在操作系统上创建一个虚拟文件夹(或文件系统),它会显示文件的名称及其大小,并允许用户访问它们。

应该如下所示: [OS]< -virtual filesystem API-> [客户]< -some protocol-> [服务器]

访问文件应如下所示:

[OS]我想从文件/vfs/somefile.tar获取字节0-255

[Client]从服务器的文件/vfs/somefile.tar中检索块0-999999。这对应于块B5F997084DC8687。下载B5F997084DC8687并解码。

[客户端]这是/vfs/somefile.tar,0-255。

[OS]我想从文件/vfs/somefile.tar获取字节256-511

[客户]这对应于B5F997084DC8687。已下载并缓存此文件。

[Client]这是来自256-511的/vfs/somefile.tar。

我认为非常简单。是否有这样的简单API?

1 个答案:

答案 0 :(得分:3)

Linux和MacOS中最流行的虚拟文件系统实现是FUSE。有一个Rust crate可以访问它:rust-fuse

对于Windows,有Dokan FUSE包装器声称与FUSE API兼容。您可以尝试使用该库构建防锈箱。

相关问题