javascript - メモリに完全に読み込まずにXmlHttpRequestからBlobを変換する

原文 javascript ajax file fileapi

ブラウザにクライアント側のファイルの復号化を実装したい。復号化されたファイルをサーバーから取得し、ブラウザで復号化し、[名前を付けて保存]ダイアログを表示して、復号化されたファイルを保存します。大きなファイル(1 GB以上)でも機能するはずです。

私は次の戦略を念頭に置いています。


XMLHttpRequestresponseType = 'blob'を使用してファイルをダウンロードします。
XMLHttpRequestで指定されたBlobを変換して復号化します。
復号化されたBlobをobjectURLとしてユーザーに提供します。


復号化はストリーム変換のように機能し、ダウンロードされたBlobからチャンクを読み取り、データを復号化して出力Blobに書き込みます。

ただし、私の知る限り、これは、ファイル全体をメモリにロードできる場合にのみ、現在のブラウザで機能します(objectURLを作成する前に、完全な復号化されたblobをメモリに格納する必要があります)。 Mozilla Developer Networkで説明されているように、現在のBlobXMLHttpRequest、およびcreateObjectURLインターフェースでは、チャンクされた読み取り/書き込みがサポートされていないようです。
Blobは不変であり、ブラウザでのバイナリデータのストリーミングサポートはないようです。

現在のブラウザでこれを実装する方法はありますか?
答え
BlobresponseType = 'blob';を取得した後、blob.slice(start, end)を使用してサブビューを取得し、FileReader APIを使用してこのサブビューに関連付けられたデータを取得できます。
関連記事

javascript - 変数がSVG.js要素のインスタンスかどうかを確認します

javascript - jquery展開テーブルが非表示として開始されない[クローズ]

javascript - リロードせずにブラウザバーのURLを変更する方法

javascript - MVC jqueryダイアログが正しく機能しない

javascript - 複数のjson配列を作成し、すべての配列を同じ関数で渡す方法

javascript - Analytics Embed APIマルチアカウント

javascript - Ember.js isDestroyedオブザーバーが機能しない

javascript - JavaScript関数は一度に6つのIDで実行されます(6回の呼び出し後に戻りますか?)

javascript - Googleマップの「noClear」が機能しない

javascript - Ajax呼び出しを使用してMVCのreturn viewメソッドでJSONデータを返す方法