readAsBinaryString,JavaScript FileReader对象的一种方法,在IE10中似乎不受支持。我尝试了以下几种方法,如这篇HTML5 Rocks文章中所建议的
String.fromCharCode.apply(null, new Uint16Array(buffer));但是,这会导致Out of stack space错误。
发布于 2013-09-03 01:32:32
我找到了答案这里
var binary = "";
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}发布于 2016-01-12 11:31:12
根据大卫·琼斯的回答,我写了这个方法。try/catch在IE10/11中处理readAsBinaryString异常,并称自己为"IE模式“:
function readBinaryStringFromBlob(blob, callback, ie) {
var reader = new FileReader();
if(!ie) {
reader.addEventListener("loadend", function () {
callback(reader.result);
});
try {
reader.readAsBinaryString(blob);
} catch (err) {
readBinaryStringFromBlob(blob, callback, true);
}
} else {
reader.addEventListener("loadend", function () {
var binary = "";
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
callback(binary);
});
reader.readAsArrayBuffer(blob);
}
}发布于 2016-09-27 12:47:40
如果你想要一些更简单的东西和ier 2015--那么这可能就是你想要的:
const reader = new FileReader();
reader.onerror = e => alert("File cannot be opened");
if (reader.readAsBinaryString) {
reader.onload = e => alert(e.target.result));
reader.readAsBinaryString(file);
}
else {
// Catering for IE 10/11
reader.onload = e => {
const bytes = new Uint8Array(e.target.result);
const binary = bytes.reduce((acc, byte) => acc + String.fromCharCode(byte), "");
alert(binary);
};
reader.readAsArrayBuffer(file);
}https://stackoverflow.com/questions/18582643
复制相似问题