我需要通过 ajax 下载图像文件,将其保存到 blob 并稍后显示在图像标签中。在我正在使用的 webkit 中
var xhr = new XMLHttpRequest();
var imgSrc = "test.jpg";
xhr.responseType = 'arraybuffer';
xhr.open("GET", imgSrc, true);
xhr.onload = function (oEvent) {
console.log('onload1');
var blob = new Blob([xhr.response], {type: "image/jpg"});
console.log(blob.size);
var img = document.createElement('img');
img.onload = function() {
console.log('onload2');
document.body.appendChild(img);
}
img.onerror = function() {
console.log('error');
}
img.src = webkitURL.createObjectURL(blob);
}
xhr.send(null);
图像大小为 43312,blob 大小为 43312。图像显示正确,到目前为止一切正常。现在让我们转到壁虎:
首先,我被困在 xhr.responseType = 'arraybuffer'; 出于某种原因,firefox 只接受“arrayBuffer”而不接受“arraybuffer”。这很令人困惑,因为根据https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest,壁虎也应该接受数组缓冲区。
然后我用 URL 替换 webkitURL。图像已下载,blob 已创建,但大小为 77978,图像加载失败(显然,图像数据已损坏)。