我正在尝试打开一个新标签,并以角度9显示从Core 2.2 Web API下载的pdf
public GeneratePdf(id: string): Observable<Blob> {
return this.http.get( this.urlPdf + '?id=' + id, { responseType: 'blob' });
}
this.dataProvider.GeneratePdf(id).subscribe({
next: (blob) => {
const blobpart = new Blob([blob], { type: 'application/pdf' });
var fileUrl = URL.createObjectURL(blobpart);
let win: any = this.getWindow();
win.open(fileUrl);
},
error: (err) => this.error.handelHttpError(err),
});
API
[HttpGet]
[Route("PDF")]
public async Task<HttpResponseMessage> PDF(Guid Id) {
_logger.LogInformation("Request:" + Request.GetDisplayUrl());
var endpoint = _appSettings.PdfEndpoint;
try {
var param = await _dal.GetPDFParameters(Id, endpoint);
// Get PDF stream
HttpResponseMessage response = await client.GetAsync(param.EndpontUrl);
if(response.IsSuccessStatusCode) {
using(HttpContent content = response.Content) {
var memStream = new MemoryStream();
Stream sourceStream = await content.ReadAsStreamAsync();
sourceStream.CopyTo(memStream);
var result = new HttpResponseMessage(HttpStatusCode.OK) {
Content = new ByteArrayContent(memStream.ToArray())
};
result.Content.Headers.ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") {
FileName = Id.ToString() + ".pdf"
};
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/octet-stream");
return result;
}
} else {
var result = new HttpResponseMessage(HttpStatusCode.BadRequest);
return result;
}
} catch(Exception ex) {
_logger.LogError(ex, "Exception error");
var result = new HttpResponseMessage(HttpStatusCode.InternalServerError);
return result;
}
}
它不会引发错误,它只是在新选项卡中打开一个json对象,并且当pdf内容超过3k字节时,对象的大小看起来太小了
{“版本”:{“主要”:1,“次要”:1,“构建”:-1,“修订”:-1,“主要修订”:-1,“次要修订”:-1}, “ content”:{“ headers”:[{“ key”:“ Content-Disposition”,“ value”:[“ attachment; filename = bd94ee98-65be-4c4f-a001-abecaf1a0644.pdf”]},{“ key” :“ Content-Type”,“ value”:[“ application / octet-stream”]}]},“ statusCode”:200,“ reasonPhrase”:“ OK”,“ headers”:[],“ requestMessage”:null ,“ isSuccessStatusCode”:true}
更新,Blob上有一个小错误,我没有将Blobpart传递给url.CreateObjecturl现在应用程序加载了新标签,但由于没有内容,因此声明了无效的pdf。我知道pdf字节正在进入api结果的内容,因为我已经检查了它。并将其转换为字符串以确保它是pdf。
感谢您抽出宝贵时间。