2010-12-17 54 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