javascript - PDF 下载显示为从 Chrome 中的服务器返回的字节码
问题描述
我有一些 Angular 代码可以调用 API 来为用户检索 PDF。发出请求后,前端或网络都不会抛出任何错误。网络以 PDF 响应,除了它全部是字节码。
这曾经在 Chrome 中有效,据我所知,代码在很长一段时间内都没有改变,所以我不确定发生了什么。更奇怪的是,它在本地对我来说很好,但在我的服务器上,我只是在响应中得到长字节码字符串。有任何想法吗?由于它在本地正常工作,我很难进行故障排除,但我想看看其他人是否遇到过这个问题(也许是最近?)
服务:
getPDF(): Observable<HttpResponse<Blob>> {
let url = `${environment}/v9/Folder/${this.folderId}/view`;
return this.http.get(url, { observe: 'response', responseType: 'blob' });
}
零件:
viewFolderCertificate = () => {
this.viewService.getPDF()
.subscribe(response => {
saveAs(response.body, 'view.pdf');
});
}
这适用于 IE11、Edge 和 Firefox。我环顾四周,看看是否有任何可能导致此问题的 Chrome 更新 - 还没有运气。我没有运行任何类型的 Adblocker,其他人在我的服务器上遇到过这个问题,所以我认为这与我自己的机器无关。
看起来好像为后端 .net 代码中的 PDF 正确设置了标题:
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
response.Content.Headers.ContentLength = stream.Length;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline")
解决方案
您可能没有在响应中设置内容类型标头。请查看PDF 文件的正确 MIME 媒体类型并设置标题。
如果这不起作用,请检查您是否有以下标题:(X-ContentType-Options: nosniff
因此浏览器不会尝试猜测内容类型)和Content-Disposition: attachment; filename="your.pdf"
(因此内容始终作为具有指定名称的文件下载)。
推荐阅读
- android - 我应该使视图无效吗?
- css - 使用 AngularJS 更改字体颜色的简单尝试,为什么它不起作用?
- batch-file - 在 Bat 文件中,如何忽略调用命令的输出
- ethereum - 从 Metamask 获取所有以太坊账户
- java - 将公共方法的实现放在私有方法中如何防止干扰消费者?
- vba - 如何循环宏?
- python - Python乌龟追踪器功能不起作用
- python - 以下两种 format() 方法有什么区别?
- android - Setter 需要不支持类型的参数:类 com.androidplot.ui.widget.TextLabelWidget
- angular - 在角度 6 中写入验证器时无法读取未定义的属性“获取”