我有一个带有ASP.Net Web API的angular2项目。我有代码从我的数据库中检索文件路径,该文件路径转到我服务器上的文档。然后,我想在浏览器中的新选项卡中显示此文档。有没有人有任何建议怎么做?
我很高兴在Angular2(Typescript)或我的API中检索文件并将其流式传输。
这是我尝试在我的API中检索它但我无法解决如何在Angular2中接收它并正确显示它:
public HttpResponseMessage GetSOP(string partnum, string description)
{
var sopPath = _uow.EpicorService.GetSOP(partnum, description).Path;
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(sopPath, FileMode.Open);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
return result;
}
非常感谢任何帮助。
非常感谢!!!
答案 0 :(得分:36)
首先,您需要为您的http请求设置选项 - 将responseType
设置为ResponseContentType.Blob
,使用blob()
将响应设置为blob
并将其类型设置为application/pdf
:
downloadPDF(): any {
return this._http.get(url, { responseType: ResponseContentType.Blob }).map(
(res) => {
return new Blob([res.blob()], { type: 'application/pdf' })
}
}
然后,为了获取该文件,您需要subscribe
,然后您可以创建新的ObjectURL
并使用window.open()
在新标签页中打开PDF:
this.myService.downloadPDF().subscribe(
(res) => {
var fileURL = URL.createObjectURL(res);
window.open(fileURL);
}
);
答案 1 :(得分:12)
Angular v.5.2.1回答:
在*.services.ts
downloadPDF(): any {
return this._httpClient.get(url, { responseType: 'blob'})
.map(res => {
return new Blob([res], { type: 'application/pdf', });
});
}
然后在*.component.ts
downloadPDF() {
let tab = window.open();
this._getPdfService
.downloadPDF()
.subscribe(data => {
const fileUrl = URL.createObjectURL(data);
tab.location.href = fileUrl;
});
}
在调用服务之前启动并打开新标签非常重要。然后将此选项卡url设置为fileurl。
答案 2 :(得分:4)
ANGULAR 5
我有同样的问题,我在那几天就失去了。
在这里,我的回答可以帮助其他人,这有助于提供pdf。
对我而言,即使我提到responseType:'arraybuffer',也无法接受它。
为此您需要提及responseType:'arraybuffer'为'json'。(Reference)
工作代码
<强> service.ts 强>
downloadPDF(): any {
return this._httpClient.get(url, { responseType: 'blob' as 'json' })
.map(res => {
return new Blob([res], { type: 'application/pdf', });
});
}
<强> component.ts 强>
this.myService.downloadPDF().subscribe(
(res) => {
var fileURL = URL.createObjectURL(res);
window.open(fileURL);
}
);
从以下链接中提及