我认为这两段代码(它们在Chrome和Firefox中运行)应该做同样的事情,但它们的行为方式不同。它们通过XmlHttpRequest
对象发送文件的二进制内容。
直接XHR发送:
xhr.send(file);
通过XHR读取文件并发送内容:
var reader = new FileReader();
reader.onload = function(event) {
xhr.send(event.target.result);
};
reader.readAsBinaryString(file);
发送的文件字节在请求之间不匹配(在第二个文件中,文件大于第一个文件,文件被破坏)。
我需要让第二个选项有用。
有什么想法吗?
答案 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())