Angular 从角度组件打开PDF blob
在我的Angular应用程序中,我需要在单击按钮时打开PDF 我首先遵循了邮局的指示,所以我现在有两种方法: 调用组件中的Angular 从角度组件打开PDF blob,angular,pdf,blob,Angular,Pdf,Blob,在我的Angular应用程序中,我需要在单击按钮时打开PDF 我首先遵循了邮局的指示,所以我现在有两种方法: 调用组件中的 public PrepareDownload(){ this._certificateService .GetPdf(args) .subscribe( result => { this.BlobUri = URL.createObjectURL(result
public PrepareDownload(){
this._certificateService
.GetPdf(args)
.subscribe(
result => {
this.BlobUri = URL.createObjectURL(result);
}
}
public Download() {
window.open(this.BlobUri);
}
在服务中
public GetPdf() : any {
var headers = new Headers();
headers.append("Content-Type", "application/json");
var payload = {id:215};
return this._http.post(this.requestUri,
JSON.stringify(payload),
{ headers: headers,
responseType: ResponseContentType.Blob })
.map((response: Response) =>
{
return new Blob([response.blob()], { type: 'application/pdf' });
});
}
GetPdf的响应包含如下数组[37,80,68,70,45,49,46,…]
。不幸的是,当调用download方法时,结果似乎是一个无效的pdf。当通过firefox下载文件并将其重命名为txt文件时,我可以看到内容不是二进制的,而是作为字符串的完整字节数组
正如@David Siro的评论所指出的,必须对服务进行修改。
请求现在返回的是一个流,而不是一个字节数组,可以按照问题中所述进行处理。正如@David Siro的评论所指出的,必须修改服务。
请求现在返回的是一个流,而不是一个字节数组,可以按照问题中所述进行处理。我认为没有必要重写blob,
(response:response)=>response.blob()
通常对我有效。如果不添加类型头,浏览器甚至不会尝试使用pdf查看器打开它。要添加这些标题,我需要重新包装。首先,确保服务器返回正确的内容类型。这是一个很好的提示。我调整了服务器代码以返回流而不是字节数组。工作起来很有魅力。我认为没有必要重写blob,(response:response)=>response.blob()
通常对我有效。如果不添加类型标题,浏览器甚至不会尝试使用pdf查看器打开它。要添加这些标题,我需要重新包装。首先,确保服务器返回正确的内容类型。这是一个很好的提示。我调整了服务器代码以返回流而不是字节数组。工作起来很有魅力。