2017-09-19 12 views
0

JavaScriptでXMLHttpRequest()を使用してファイルを送信しようとしています。これを行うには、私はFileReaderreadAsArrayBuffer()を使用します。XMLHttpRequest.send()で大規模なArrayBufferがクラッシュする

// 'content' from readAsArrayBuffer 
var xhr = new XMLHttpRequest(); 
xhr.open("POST", "url", true); 
xhr.send(content); 

さて、私は大規模なArrayBuffer(例えば1GBのファイル)でsend(ArrayBuffer)を使用しようとすると、ブラウザ/コンピュータに依存し、それはブラウザをクラッシュ:

私のコードは、そのようなもので終わります。このデモでは、1ギガバイトのArrayBufferを作成し、いくつかのURLにアップロードしようとしhttps://codepen.io/Aymkdn/pen/xXZMwV(テストボタンだけをクリックしてください)

..ここ

はデモです。最後のChromeとFirefoxを使用して、3台のコンピュータで試しました。 Chromeブラウザの100%がクラッシュし、Firefoxブラウザの66%がクラッシュしました。

ここに何か不足していますか? send()に渡されるデータのサイズ制限はありますか?

感謝の異なるテストの後

+0

サーバーまたはWebconfigでは、uploadlimitを増やす必要があります。私はデフォルト設定が5メガバイトだと思う。 –

+0

通常は大きなファイルを送信するときは、メモリにすべてをロードせずにチャンクをロードし、そのチャンクを送信する。これには、レジューム、プログレスバーなどの他の利点があります。両者が単純なプロトコルに同意しなければならないので、もう少し作業が必要です。しかし、長期的にはそれだけの価値があります。 – Keith

+0

Alen>これはサーバー側ではないため、ブラウザは送信前にクラッシュします。 Keith>はい、私が使用しているサーバーはチャンクをサポートしていません:-( – AymKdn

答えて

0

、簡単に修正がArrayBufferの代わりにBlobを送信するためにあるようです。

// 'content' from readAsArrayBuffer, so it's an ArrayBuffer 
var xhr = new XMLHttpRequest(); 
xhr.open("POST", "url", true); 
xhr.send(new Blob([content])); // transform ArrayBuffer into Blob 

この場合、ブラウザはもはやクラッシュしません。

関連する問題