我有一个JavaScript应用程序和一个创建Excel文件的API,并返回一个带有以下标题的字节数组:
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition:attachment; filename=List.xlsx
当我转到Excel资源API网址时,系统会提示我下载Excel文件。如果我这样做,它下载正常并在Excel中打开。一切都很好。
现在问题:
我不想要的是在用户的浏览器窗口中公开API URL,因此我的目标是:
我拥有的是:
下载文件,但是当我尝试打开文件时,Excel无法将其识别为有效的Excel文件。
// "data" is the contents from the server
var reader = new FileReader();
var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
reader.readAsDataURL(blob);
reader.onloadend = function (e) {
window.open(reader.result, 'Excel', 'width=20,height=10,toolbar=0,menubar=0,scrollbars=no', '_blank');
}
答案 0 :(得分:8)
我得到了它的工作。我只需要将以下内容添加到我的XMLHttpRequest对象中:
responseType: 'arraybuffer'
但它在IE中不起作用,因为IE无法打开数据URI。甚至不是IE11。
无论如何,我发现a great library called FileSaver.js处理所有主流浏览器(包括IE10 +)的文件保存