2010-12-17 14 views
0

私はこれらの2つのコード(ChromeとFirefoxで動作する)は同じことをするはずだと思っていましたが、彼らはXmlHttpRequestオブジェクトを介してファイルのバイナリコンテンツを送信します。HTML5ファイルAPI readAsBinaryString()の結果と異なる送信(ファイル)

直接XHRセンド:

xhr.send(file); 

読むファイルとXHRを経由して内容を送信します。送信され

var reader = new FileReader(); 
reader.onload = function(event) { 
    xhr.send(event.target.result); 
}; 
reader.readAsBinaryString(file); 

ファイルのバイトは秒1で(要求間で一致していない、ファイルが内よりも大きく、最初のファイルとファイルが破損します)。

私は2番目のオプションの作業をする必要があります。

アイデア?

私は同様の問題に遭遇した

答えて

1

からCorruption with FileReader into FormData

読者の結果は文字列です。配列バッファに変換する必要があります:

var result = e.target.result; 
var l = result.length 
var ui8a = new Uint8Array(l) 
for (var i = 0; i < l; i++) 
    ui8a[i] = result.charCodeAt(i); 
var bb = new (window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder)() 
bb.append(ui8a.buffer) 
xhr.send(bb.getBlob()) 
+0

このコードはFirefoxでのみ動作しますか? –

+0

これはfirefoxとwebkitで動作します。オペラにはBlobBuilderや型付き配列はありません。 [BlobBuilder.js](https://github.com/eligrey/BlobBuilder.js)はBlobBuilderを取得します。型付き配列がない場合の対処方法を理解しようとしています。 – aeosynth

関連する問題