HTML5文件API XmlHttpRequest发送(文件)与发送readAsBinaryString()结果不同

时间:2010-12-17 17:50:48

标签: javascript html file html5

我认为这两段代码(它们在Chrome和Firefox中运行)应该做同样的事情,但它们的行为方式不同。它们通过XmlHttpRequest对象发送文件的二进制内容。

直接XHR发送:

xhr.send(file);

通过XHR读取文件并发送内容:

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

发送的文件字节在请求之间不匹配(在第二个文件中,文件大于第一个文件,文件被破坏)。

我需要让第二个选项有用。

有什么想法吗?

1 个答案:

答案 0 :(得分: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())