IE11 使用 blob 保存在 angular 中损坏的已下载 .xlsx 文件(在本地工作)
IE11 saves downloaded .xlsx files corrupted in angular using blob (works locally)
当我从服务器下载 .xlsx 文件时,下载的文件没有正确的结构(样式表、工作表等),而是一个扩展名为 .xlsx 的二进制文件。
注意: 它在 Chrome、Firefox、Edge 和本地甚至在 IE11 上都能完美运行,我已将 Internet Explorer 的安全设置设置为与本地和本地相同远程网站。
这是服务器创建响应的方式:
const buffer = json2xls(values, { fields: fields });
res.end(buffer, 'binary');
这是客户端保存获取的数据的方式:
downloadFile(selectedReport) {
const blob = new Blob([selectedReport.blob()], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
FileSaver.saveAs(blob, `result.xlsx`);
}
我试过替换:
FileSaver.saveAs(blob, result.xlsx
);
与:
window.navigator.msSaveBlob(blob, result.xlsx
);
但结果还是一样
注意:损坏的result.xlsx
文件内容与服务器发送的buffer
相同
您检查过您的 http 服务器 MIME 类型了吗?
.xlsx 的应该是
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
当我从服务器下载 .xlsx 文件时,下载的文件没有正确的结构(样式表、工作表等),而是一个扩展名为 .xlsx 的二进制文件。
注意: 它在 Chrome、Firefox、Edge 和本地甚至在 IE11 上都能完美运行,我已将 Internet Explorer 的安全设置设置为与本地和本地相同远程网站。
这是服务器创建响应的方式:
const buffer = json2xls(values, { fields: fields });
res.end(buffer, 'binary');
这是客户端保存获取的数据的方式:
downloadFile(selectedReport) {
const blob = new Blob([selectedReport.blob()], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
FileSaver.saveAs(blob, `result.xlsx`);
}
我试过替换:
FileSaver.saveAs(blob, result.xlsx
);
与:
window.navigator.msSaveBlob(blob, result.xlsx
);
但结果还是一样
注意:损坏的result.xlsx
文件内容与服务器发送的buffer
相同
您检查过您的 http 服务器 MIME 类型了吗? .xlsx 的应该是 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet