2010-12-17 71 views
0

我認爲這兩段代碼(他們在Chrome和Firefox中工作)應該做同樣的事情,但他們的行爲方式不同。他們通過XmlHttpRequest對象發送文件的二進制內容。HTML5 File API XmlHttpRequest發送(文件)不同於發送readAsBinaryString()結果

直接XHR發送:

xhr.send(file); 

讀取文件並通過XHR發送內容:發送不請求(在第二個之間匹配

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

文件字節,文件比大第一個,文件被破壞)。

我需要使第二個選項工作。

任何想法?

回答

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中使用? – 2011-08-29 12:27:18

+0

它可以在firefox和webkit中使用。歌劇沒有BlobBuilder或類型數組。 [BlobBuilder.js](https://github.com/eligrey/BlobBuilder.js)讓你BlobBuilder,我想弄清楚如何處理缺乏類型數組。 – aeosynth 2011-08-29 22:25:08