我需要通过Angulars $ http或其他东西从服务器获取excel文件(xlsx)。
问题在于REST服务背后的文件需要自定义标头来执行身份验证。
如果文件不在Auth自定义标题后面,我本可以使用window.open()进行测试并正常工作,但该文件应该是安全的,因此它被移到了Auth服务之后。
我可以使用angular从服务器获取响应并将其作为blob写入文件,但内容不可读。
有没有人知道如何实现这个目标?
答案 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();