3 linux windows virtualfilesystem rust
我正在开发一个应用程序,它应该通过网络安装一个文件夹。它应该显示类似于 SMB 挂载的文件夹,只是服务器不使用 SMB 协议。类似于:服务器 A 是一个 HTTP 服务器,包含文件,客户端 B 应该能够挂载这些文件,以便能够直接访问它们,而无需先下载它们(流式传输)。因此,客户端应该能够流式传输文件,即访问任意位置的文件。此外,存储在服务器 A 上的文件以特定方式进行编码、压缩、加密和打包,因此我需要在将它们呈现给虚拟文件系统之前对其进行解码(进行一些内部处理)。客户端应具有只读访问权限。我希望客户端可以在 Windows 和 Linux 上使用。它应该看起来像这样:
客户端已安装一个文件夹并希望访问位置 1248989 处的 /virtualfolder/data.file。存储在服务器上的数据被分割成任意长度的块(假设它是 1 MB)。然后,我需要下载文件中与字节 1000000 - 1999999 相对应的部分,对其进行解码、缓存,然后用户可以访问该数据。
当然,我的解码过程是在内部完成的,我只需要一个 API 在操作系统上创建一个虚拟文件夹(或文件系统),该文件夹显示文件的名称及其大小并让用户访问它们。
它应该如下所示: [OS] <-虚拟文件系统 API-> [客户端] <-某些协议-> [服务器]
访问文件应该如下所示:
[操作系统] 我想从文件 /vfs/somefile.tar 获取字节 0-255
[客户端] 从服务器的文件 /vfs/somefile.tar 中检索块 0-999999。这对应于块 B5F997084DC8687。下载 B5F997084DC8687 并对其进行解码。
[客户端] 这里是 /vfs/somefile.tar 从 0-255。
[操作系统] 我想从文件 /vfs/somefile.tar 获取字节 256-511
[客户端] 这对应于 B5F997084DC8687。已经下载并缓存了该文件。
[客户端] 这是来自 256-511 的 /vfs/somefile.tar。
我认为非常简单。有没有一个简单的 API 可以处理这些事情?
Linux 和 MacOS 中最流行的虚拟文件系统实现是 FUSE。有一个 Rust 箱可以提供对其的访问:rust-fuse。
对于 Windows,有Dokan FUSE包装器声称与 FUSE API 兼容。您可以尝试使用该库构建 rust-fuse 箱。