我想分享这个,因为我花了几个小时通过查看各个帖子来整理细节。
任务: 使用XLSX作为Angular2项目的一部分,导入xls,xlsx或csv类型文件以生成报告。
问题: IE不支持readAsBinaryString,并且在其他Web浏览器不会生成错误时会产生错误
解决方案: 如果不存在,则手动为readAsBinaryString创建原型函数。
守则: 将以下函数之一添加到尝试读取该文件并使用“readAsBinaryString”的组件。我建议#2,但两者似乎都有效。
选项1:
IECheck(): void {
if (FileReader.prototype.readAsBinaryString === undefined) {
FileReader.prototype.readAsBinaryString = function (fileData) {
let binary = '';
const pt = this;
const reader = new FileReader();
reader.onload = function (e) {
const bytes = new Uint8Array(reader.result);
const length = bytes.byteLength;
for (let i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
const f = {target: {result: binary}};
pt.onload(f);
}
reader.readAsArrayBuffer(fileData);
}
}
}
选项2:
IECheck(): void {
if (FileReader.prototype.readAsBinaryString === undefined) {
FileReader.prototype.readAsBinaryString = function (fileData) {
const pt = this;
const reader = new FileReader();
reader.onload = function (e) {
const blobURL = URL.createObjectURL(fileData);
const xhr = new XMLHttpRequest;
xhr.open('get', blobURL);
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.onload = function () {
const g = {target: {result: xhr.response}};
pt.onload(g)
}
xhr.send();
}
reader.readAsArrayBuffer(fileData);
}
}
}
在构造函数或OnInit(如果使用生命周期钩子)中调用IECheck函数
this.IECheck();
结果: XLXS将在IE上传文件
让我知道你对此的想法,快乐编码!