2

ネットワーク経由でフォルダーをマウントするアプリケーションを開発しています。SMB によってマウントされたフォルダーと同様に表示されるはずですが、サーバーが SMB プロトコルを使用していないことだけが異なります。これに似ています: サーバー A はファイルを含む HTTP サーバーであり、クライアント B はそれらのファイルをマウントして、最初にダウンロード (ストリーミング) せずに直接アクセスできるようにする必要があります。したがって、クライアントはファイルをストリーミングできる必要があります。つまり、任意の位置でファイルにアクセスできます。また、サーバー A に保存されているファイルは、特定の方法でエンコード、圧縮、暗号化、およびパケット化されているため、仮想ファイル システムに提示する前に、それらをデコードする (内部処理を行う) 必要があります。クライアントには読み取り専用アクセスが必要です。Windows と Linux でクライアントを利用できるようにしたい。次のようになります。

クライアントはフォルダーをマウントし、1248989 の位置にある /virtualfolder/data.file にアクセスしようとしています。サーバーに保存されているデータは、任意の長さのブロックに分割されます (1 メガバイトとしましょう)。次に、バイト 1000000 ~ 1999999 に対応するファイルの一部をダウンロードし、デコードしてキャッシュし、ユーザーがこのデータにアクセスできるようにする必要があります。

もちろん、デコード プロセスは内部で行われます。必要なのは、ファイルの名前とサイズを表示し、ユーザーがアクセスできるようにする仮想フォルダー (またはファイル システム) を OS 上に作成するための API だけです。

次のようになります: [OS] <-virtual filesystem API-> [Client] <-some protocol-> [Server]

ファイルへのアクセスは次のようになります。

[OS] /vfs/somefile.tar ファイルから 0-255 バイトを取得したい

[クライアント] サーバーのファイル /vfs/somefile.tar からブロック 0 ~ 999999 を取得しています。これはブロック B5F997084DC8687 に対応します。B5F997084DC8687 をダウンロードしてデコードします。

[クライアント] 0 ~ 255 の /vfs/somefile.tar です。

[OS] /vfs/somefile.tar ファイルから 256 ~ 511 バイトを取得したい

【クライアント】B5F997084DC8687に該当します。このファイルは既にダウンロードされ、キャッシュされています。

[クライアント] 256-511 の /vfs/somefile.tar です。

かなり簡単だと思います。そのようなもののための簡単な API はありますか?

4

1 に答える 1

3

Linux および MacOS での仮想ファイルシステムの最も一般的な実装は FUSE です。それへのアクセスを提供する Rust クレートがあります: rust-fuse

Windows には、FUSE API との互換性を主張するDokan FUSEラッパーがあります。そのライブラリでrust-fuseクレートを構築しようとするかもしれません。

于 2016-10-15T12:24:46.130 に答える