我要从c#.NET API返回FileContentResult,在我的angular 7应用程序中,我通过HttpClient将其作为blob接收,然后使用以下内容打开一个新选项卡并尝试显示它。
this.myService.GetPdfBlob().subscribe(data => {
var fileURL = window.URL.createObjectURL(data);
window.open(fileURL, '_blank');
})
执行完此操作后,将打开一个新选项卡,但我看到一个巨大的json对象的文本,该文本以FileContents属性开头,并且该值是一个很大的字符串,我想这是pdf文档的字节。看起来像这样:
{"FileContents":"JVBERi0xLjUNJeLjz9MNCjI1IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDg1NzU1L08gMjcvRSA3MzgzMy9OIDQvVCA4NTQxNS9IIFsgNDc5IDIyMl0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgDQozOCAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtb...it keeps going..", "FileDownloadName":"MyBigFile.pdf"}
如何使它显示实际的pdf文档,而不显示FileContentResult的这个大JSON对象?我最终需要显示多种文件类型,但我只是从pdf开始。
答案 0 :(得分:0)
我稍微修改了C#代码,以返回一个对象,该对象具有一个字节数组byte [](称为Bytes)和一个文件名。直到在我的角度代码中执行此操作之前,我仍然遇到问题:
this.http.get(myUrl).subscribe(response => {
var byteCharacters = atob(response.Bytes);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], {type: "application/pdf"});
var fileURL = URL.createObjectURL(blob);
window.open(fileURL, '_blank');
})