Http 如何从angular2 RC5中的API下载PDF?

Http 如何从angular2 RC5中的API下载PDF?,http,pdf,angular,arraybuffer,Http,Pdf,Angular,Arraybuffer,前一个问题有一些很好的解决方法: 但是现在RC5已经出来了,我们可以使用arrayBuffer()。我似乎拿这个一事无成。如何从这一点变成一个漂亮的pdf blob: return this._authHttp.get(this.fileUrl+id) .map((res:Response) => res.arrayBuffer()) .subscribe( data => { console.

前一个问题有一些很好的解决方法:

但是现在RC5已经出来了,我们可以使用arrayBuffer()。我似乎拿这个一事无成。如何从这一点变成一个漂亮的pdf blob:

return this._authHttp.get(this.fileUrl+id)
        .map((res:Response) => res.arrayBuffer())
        .subscribe(
            data => {
                console.log(data);
                var blob = new Blob([data], {type: 'application/pdf'});
                console.log(blob);
                saveAs(blob, "testData.pdf");

        },
            err => console.error(err),
        () => console.log('done')
    );

最终数据的大小是我预期的两倍。你知道我遗漏了什么吗?

我在下载pdf文件时遇到了同样的问题。我浪费了两天的时间来修复这个问题,但最终还是成功了。您需要将responseType设置为blob

return this._authHttp.get(this.fileUrl+id , 
                         { responseType: ResponseContentType.Blob })
    .map((res:Response) => res.blob())
    .subscribe(
        data => {
            console.log(data);
            var blob = new Blob([data], {type: 'application/pdf'});
            console.log(blob);
            saveAs(blob, "testData.pdf");

    },
        err => console.error(err),
    () => console.log('done')
);
别忘了导入ResponseContentType

希望这能帮助你

谢谢你,伙计

这个黑客,改变了我的生活。。。谢谢但我做了一个轻微的改变

        this._authHttp.get(URLx, { responseType: ResponseContentType.Blob })
        .map((res:any) => return res) <-- this line change --!>
        .subscribe( 
            data => {
                var mediaType = 'application/pdf';
                var blob = new Blob([data], {type: mediaType});
                var filename = `Veiculo-Eixos-${veiculoDTO.placa}.pdf`;
                // saveAs(blob, filename);
                var fileURL = URL.createObjectURL(blob);
                window.open(fileURL); // if you want to open it in new tab  
            },
            error =>{
                console.log(error);
            });
this.\u authHttp.get(URLx,{responseType:ResponseContentType.Blob})
.map((res:any)=>返回res)
.订阅(
数据=>{
var mediaType='application/pdf';
var blob=新blob([data],{type:mediaType});
var filename=`Veiculo Eixos-${veiculoDTO.placa}.pdf`;
//saveAs(blob,文件名);
var fileURL=URL.createObjectURL(blob);
window.open(fileURL);//如果要在新选项卡中打开它
},
错误=>{
console.log(错误);
});

好极了!!responseType做到了。我使用了let blob=new blob([response[''u body']],{type:'application/pdf'});嗨,Kira,我正在尝试上面的解决方案,但是我在使用saveAs时遇到了问题。我得到了错误TS2304:找不到您需要包含的名称'saveAs'@mayowaogundele。在这样做之后,我得到了一系列错误。为此,请参阅一篇新的SO帖子@mayowaogundele您需要安装文件保护程序npm包