在 IE11 中读取 Blob
Reading Blobs in IE11
我使用 this 文章使用 JavaScript 读取 CSV 文件。下面的代码在 Chrome 和 Firefox 中运行良好,但 IE 11 会抛出以下错误:
Object doesn't support property or method 'readAsBinaryString'
调用时:
reader.readAsBinaryString(blob);
然而,根据 this MSDN 文章,readAsBinaryString
是 FileReader
支持的方法。我是否遗漏了什么/在 IE 11 中是否有不同的文件读取方式?
HTML代码:
<table>
<tr>
<td>Import CSV File</td>
<td><input type="file" id="files" name="file"/></td>
</tr>
</table>
<button id="read" href="#">Read</button>
JS代码:
//read a file
function readBlob() {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = 0;
var stop = file.size - 1;
var reader = new FileReader();
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
makeJSON(evt.target.result);
}
};
var blob = file.slice(start, stop + 1);
reader.readAsBinaryString(blob);
}
也许你可以使用这个:
var binary = "";
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
参考:Link
FileReader
还支持 readAsText
方法,可用于在所有三种浏览器(Chrome、FF 和IE11).
用 reader.readAsText(blob)
替换 reader.readAsBinaryString(blob)
解决了问题。
我使用 this 文章使用 JavaScript 读取 CSV 文件。下面的代码在 Chrome 和 Firefox 中运行良好,但 IE 11 会抛出以下错误:
Object doesn't support property or method 'readAsBinaryString'
调用时:
reader.readAsBinaryString(blob);
然而,根据 this MSDN 文章,readAsBinaryString
是 FileReader
支持的方法。我是否遗漏了什么/在 IE 11 中是否有不同的文件读取方式?
HTML代码:
<table>
<tr>
<td>Import CSV File</td>
<td><input type="file" id="files" name="file"/></td>
</tr>
</table>
<button id="read" href="#">Read</button>
JS代码:
//read a file
function readBlob() {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = 0;
var stop = file.size - 1;
var reader = new FileReader();
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
makeJSON(evt.target.result);
}
};
var blob = file.slice(start, stop + 1);
reader.readAsBinaryString(blob);
}
也许你可以使用这个:
var binary = "";
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
参考:Link
FileReader
还支持 readAsText
方法,可用于在所有三种浏览器(Chrome、FF 和IE11).
用 reader.readAsText(blob)
替换 reader.readAsBinaryString(blob)
解决了问题。