从服务器下载Excel文件并保存在客户端

我有一个JavaScript应用程序和一个API,创build一个Excel文件,并返回一个字节数组与下列标题:

Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet Content-Disposition:attachment; filename=List.xlsx 

当我去Excel资源API URL时,系统会提示下载Excel文件。 如果我这样做,它下载罚款,并在Excel中打开。 一切都很好。

现在来解决这个问题:

我不想要的是在用户的浏览器窗口中公开API URL,所以我的目标是:

  • 通过AJAX XMLHttpRequest下载Excel文件
  • 将内容(字节数组)存储在Blob中
  • 用Blob创build一个数据URI
  • 在popup窗口中打开数据URI,提示用户下载Excel文件

我有什么是这样的:

它下载文件,但是当我尝试打开文件时,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'); } 

我得到了它的工作。 我只需要添加以下到我的XMLHttpRequest对象:

 responseType: 'arraybuffer' 

但是它在IE中不起作用,因为IE不能打开数据URI。 甚至没有IE11。

无论如何,我发现了一个名为FileSaver.js的库 ,它处理所有主stream浏览器(包括IE10 +)的保存文件,