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

Gau*_*aui 8 javascript excel blob filereader

我有一个JavaScript应用程序和一个API,用于创建Excel文件并返回带有以下标题的字节数组:

Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition:attachment; filename=List.xlsx
Run Code Online (Sandbox Code Playgroud)

当我转到Excel资源API URL时,系统会提示我下载Excel文件.如果我这样做,它下载正常并在Excel中打开.一切都很好.

现在来问题:

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

  • 通过AJAX XMLHttpRequest下载Excel文件
  • 将内容(字节数组)存储在Blob中
  • 使用Blob创建数据URI
  • 在弹出窗口中打开数据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');
}
Run Code Online (Sandbox Code Playgroud)

Gau*_*aui 8

我搞定了.我只需要将以下内容添加到我的XMLHttpRequest对象中:

responseType: 'arraybuffer'
Run Code Online (Sandbox Code Playgroud)

但它在IE中不起作用,因为IE无法打开数据URI.甚至不是IE11.

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