使用Angular获取excel文档并保存到磁盘

时间:2015-07-30 13:48:24

标签: javascript angularjs excel http

我需要通过Angulars $ http或其他东西从服务器获取excel文件(xlsx)。

问题在于REST服务背后的文件需要自定义标头来执行身份验证。

如果文件不在Auth自定义标题后面,我本可以使用window.open()进行测试并正常工作,但该文件应该是安全的,因此它被移到了Auth服务之后。

我可以使用angular从服务器获取响应并将其作为blob写入文件,但内容不可读。

有没有人知道如何实现这个目标?

2 个答案:

答案 0 :(得分:1)

对任何有兴趣的人:

基于George87的回答,我能够找到基于角度$http服务而不是XMLHttpRequest API的解决方案。 $http的优点是它支持承诺。

下面的TypeScript代码应该可以使用。只需确保将$http服务以及fileSaverService注入角度控制器。例如,config参数可用于设置请求的'Authorization'标头。

private downloadExcelFile = (url: string, fileName: string) => {
    const config: angular.IRequestShortcutConfig = {
        headers: {
            Authorization: auth,
        },
        responseType: 'blob',
    };
    this.$http.get(`${url}?name=${fileName}`, config)
        .then((response) => {
            this.fileSaverService.saveAs(response.data, '<localFileName>.xlsx');
        });
}

答案 1 :(得分:0)

我找到了问题的答案,我使用了XMLHttpRequest。

其他人的示例代码:

var xhr = new XMLHttpRequest();
xhr.open("GET", "test.xlsx");
xhr.responseType = "blob";

xhr.onload = function () {
    if (this.status === 200) {
    xhr.response.type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    saveAs(xhr.response, "test.xlsx")
    }
};
xhr.send();

另存为方法: https://github.com/eligrey/FileSaver.js