、塊でチャンクを節約し、より大きなブロブにそれらを結ぶカバーする必要があります:チャンクの
- 持続性が必要とされていない(つまり、ブラウザを閉じるとすべてのチャンクが削除されます)
- ファイルは、ユーザーが自分のファイルシステムに保存することによってのみ永続化されます。ユーザーが保存したファイルに再度アクセス権を与えない限り、Webアプリケーションは閉じられた後でファイルにアクセスできません。
- おそらく、ファイルサイズが大きすぎない場合(おそらくそれを見つけるためにベンチマークする必要があります)。 Chromeは、1GBの合計でチャンクがうまく動いていました。
私はsimple test for using blobs as chunksを作成しました。あなたは、異なるサイズとチャンク番号パラメータで遊ぶことができます:あなたはその持続性を必要とした場合は
var chunkSize = 500000;
var totalChunks = 200;
var currentChunk = 0;
var mime = 'application/octet-binary';
var waitBetweenChunks = 50;
var finalBlob = null;
var chunkBlobs =[];
function addChunk() {
var typedArray = new Int8Array(chunkSize);
chunkBlobs[currentChunk] = new Blob([typedArray], {type: mime});
console.log('added chunk', currentChunk);
currentChunk++;
if (currentChunk == totalChunks) {
console.log('all chunks completed');
finalBlob = new Blob(chunkBlobs, {type: mime});
document.getElementById('completedFileLink').href = URL.createObjectURL(finalBlob);
} else {
window.setTimeout(addChunk, waitBetweenChunks);
}
}
addChunk();
、W3C File System APIはあなたが必要なものをサポートする必要があります。チャンクを別々のファイルに書き込んだり、すべてのチャンクが完成したら、それらをすべて読み込んで1つのファイルに追加したり、チャンクを削除したりすることができます。
アプリケーションにサンドボックスファイルシステムを割り当てて(指定されたクォータで)機能することに注意してください。ファイルはそのアプリケーションにのみアクセス可能です。ファイルがWebアプリケーションの外部で使用される場合は、ファイルをアプリケーションファイルシステムから通常のファイルシステムに保存する機能が必要になることがあります。 createObjectURL()メソッドを使用して、そのようなことを行うことができます。
ブラウザサポートの現在の状態については正しいですが、ファイルシステムのエミュレーションバックエンドとしてIndexedDB(もっと広くサポートされています)に基づいています。A Filesystem API polyfillが利用可能です。私は大きなファイルに対してポリフィルをテストしませんでした。サイズの制限やパフォーマンスの制限に遭遇する可能性があります。
http://help.infragistics.com/Help/NetAdvantage/ASPNET/2013.1/CLR4.0/html/WebUpload_Saving_Files_as_Stream.html http://www.aurigma.com/docs/iu7/saving-uploaded- files-in-aspnet.htm 私はあなたを助けるかもしれないこの2つのリンクを持っています –
適度なサイズのファイルのために、私の最初の本能はそれぞれの塊をそれ自身の 'Blob'に保存し、それらをすべてひとつの大きな' Blob' (新しいコンストラクタを使用して)最後に 'createObjectURL'を使用して最終的な' Blob'を保存します。IIRC、JS 'Blob'は必要に応じてディスクに保存されるので、ファイルが本当に巨大でない限り(または私が本当に間違っています))、あまりにも恐ろしいものではありませんか? –
@JordanGray良いアイデアかもしれない - 私は、ダウンロードしたチャンクをブラウザセッション間で継続的にダウンロードする必要があると仮定したが、そうでない場合は、(ブラウザが必要なときにブロブをファイルに保存して実装する場合)最もクリーンなアイデアかもしれない。 –