0

我正在从我的 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 开始。

4

1 回答 1

1

我稍微更改了我的 C# 代码以返回一个对象,该对象具有一个名为 Bytes 的字节数组 byte[] 和一个文件名。直到我在我的角度代码中这样做之前,我仍然遇到了问题:

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');
})
于 2019-11-20T18:50:14.070 回答