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

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

内容类型:应用程序/vnd.openxmlformats-officedocument.spreadsheetml.sheet
内容处置:附件;filename=List.xlsx

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

现在谈谈问题:

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

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

我所拥有的是:

它会下载该文件,但当我试图打开该文件时,Excel无法将其识别为有效的Excel文件。

//“数据”是来自服务器的内容
var reader=new FileReader();
var blob=new blob([data],{type:'application/vnd.openxmlformats of icedocument.spreadsheetml.sheet'});
reader.readAsDataURL(blob);
reader.onloadend=函数(e){
打开(reader.result,'Excel','width=20,height=10,toolbar=0,menubar=0,scrollbars=no','u blank');
}

我让它工作了。我只需向XMLHttpRequest对象添加以下内容:

响应类型:“arraybuffer”

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

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

发表评论