【发布时间】:2018-03-15 22:48:21
【问题描述】:
我对 Angular 5.0 比较陌生,并且已经阅读了文档,但我似乎无法取得任何进展。我有一个带有 Angular 5 UI 的 .Net Core 2.0 项目,并且正在将 PDF 文件的字节 [] 从 API 控制器传递给 Angular。然后我想在我的视图中通过 Object/Embed/Iframe 嵌入这个 PDF 文件。到目前为止,我有以下内容:
控制器:
[HttpGet]
[Route("api/PdfReports/GetReport")]
public byte[] Get()
{
string directory = System.IO.Directory.GetCurrentDirectory();
string fileName = "TERM.pdf";
string filePath = Path.Combine(directory, fileName);
byte[] resultArray = System.IO.File.ReadAllBytes(Path.Combine(filePath));
return resultArray;
}
查看:
<div *ngIf="dataLocalUrl != undefined">
<h5>iframe using local url</h5>
<iframe width="500" height="600" [attr.src]="dataLocalUrl" type="application/pdf"></iframe>
<h5>object using local url</h5>
<object [attr.data]="dataLocalUrl" type="application/pdf" width="100%" height="100%"></object>
<h5>embed using local url</h5>
<embed [attr.src]="dataLocalUrl" type="application/pdf" width="100%" height="100%">
</div>
以及组件:
import { Component, Inject } from '@angular/core';
import { HttpClient, HttpResponse, HttpHeaders } from '@angular/common/http';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
import { Observable } from 'rxjs/Observable';
import { Router } from '@angular/router';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Component({
selector: 'pdf-display',
templateUrl: './pdfdisplay.component.html'
})
export class PdfDisplayComponent {
datalocalURL: any;
http: HttpClient;
domSanitizer: DomSanitizer;
constructor(private httpClient: HttpClient, @Inject('BASE_URL') baseURL: string, sanitizer: DomSanitizer) {
this.http = httpClient;
this.domSanitizer = sanitizer;
this.httpClient.get(baseURL + 'api/PdfReports/GetReport', { responseType: 'arraybuffer' })
.subscribe((data: any) => {
var pdfFile = new Blob([data._body], { type: 'application/pdf' });
this.datalocalURL = this.domSanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(pdfFile));
});
}
}
问题是虽然数据正确地通过控制器,但当我调试组件时,数据总是返回未定义。有人可以帮帮我吗?
【问题讨论】: