如何下载angular6中的xls或xlsx文件(Blob API响应)

如何下载angular6中的xls或xlsx文件(Blob API响应),angular6,blob,xlsx,Angular6,Blob,Xlsx,我试图下载在API响应中作为blob接收的XLSX文件,但它作为HttpErrorResponse接收 这是由于angular5的angular请求结构发生了变化 我已经尝试了使用HttpErrorResponse对象响应的请求,如下所示: myBlobRequest():Observable<any>{ return this.http.get(url, { responseType: 'blob'}) .map((response: Response) =

我试图下载在API响应中作为blob接收的XLSX文件,但它作为HttpErrorResponse接收

这是由于angular5的angular请求结构发生了变化

我已经尝试了使用HttpErrorResponse对象响应的请求,如下所示:

myBlobRequest():Observable<any>{
return this.http.get(url, { responseType: 'blob'})
            .map((response: Response) => {
                return response;
            })
            .catch((res: Response) => {
                // handleError(response)
            });
}
myBlobRequest():可观察{
返回此.http.get(url,{responseType:'blob'})
.map((响应:响应)=>{
返回响应;
})
.catch((res:Response)=>{
//handleError(响应)
});
}

以下解决方案对我有效。因为它在HttpErrorResponse中给出了json解析错误

解决方案

{responseType:'blob'}应替换为{responseType:'blob'作为'json'}

请求:

获取方法:

myBlobRequest():Observable<any>{
return this.http.get(url, { responseType: 'blob' as 'json' })
            .map((response: Response) => {
                return response;
            })
            .catch((res: Response) => {
                // handleError(response)
            });
}
  • 没有文件保护程序库:

这毫无意义。将
添加为“json”
只不过是在欺骗编译器将调用哪个重载,而您的映射回调无论如何都是毫无意义的。如果您想在HttpClient中获取响应对象,请参阅。@jonrsharpe,谢谢您的建议。这个解决方案对我有效,因为在我的例子中,收到了HttpErrorResponse对象,并且显示了in error.error>>json解析错误。
this.serviceObj.myBlobRequest.subscribe((blobResponse)=>{
            var blob = new Blob([resp], { type: 'application/vnd.openxmlformats- 
                       officedocument.spreadsheetml.sheet;' });
            FileSaver.saveAs(blob, "test.xlsx");
});
this.serviceObj.myBlobRequest.subscribe((blobResponse)=>{
            var blob = new Blob([resp], { type: 'application/vnd.openxmlformats- 
                       officedocument.spreadsheetml.sheet;' });
            // Download File without FileSaver
            const downloadUrl = window.URL.createObjectURL(blob);
            var link = document.createElement('a');
            link.href = downloadUrl;
            link.download = "test.xlsx";
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);

});