javascript - $http PDF 下载 - 无效文件
问题描述
我正在尝试从 AngularJS 下载带有 $http 服务的 PDF 文件。
当我尝试打开文件时,它是无效的(无效的色彩空间)并且页面是空白的。
然后我检查:
- 从 Firefox 开发者控制台 - 网络:我看到来自 ajax 调用的响应对象。
- 我在我的代码中设置了一个断点:我看到从 $http 返回的响应对象。
它们在某种程度上有所不同:即
- 从开发者控制台:
“%PDF-1.4 %����............
- 来自 $http:
%PDF-1.4 %äãÏÒ............
整个文档也是如此。
我究竟做错了什么?
PS代码:
downloadService.downloadPDF(response.url).then(
function(response) {
if (response) {
var aTag = document.getElementById('downloadFile');
aTag.setAttribute('href', 'data:application/pdf;charset=utf-8,' + encodeURIComponent(response));
aTag.setAttribute('download', $scope.data.filename);
aTag.click();
}
});
响应标头:
Cache-Control:max-age=3600, must-revalidate
Content-Disposition:inline; filename=4550f2025f45cc2d14a403fbc1840160d4d052e4_598551722_300501.pdf
Content-Type:application/pdf
Date:Tue, 23 Oct 2018 11:17:44 GMT
Expires:0
Pragma:public
Server:Apache-Coyote/1.1
Set-Cookie:JSESSIONID=Y0kTkAV7GJLVRK1fKuZfffff; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/appbase; HttpOnly
Transfer-Encoding:chunked
解决方案
encodeURIComponent 没有进行所需的 BASE64 编码
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
看看这里:
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
或者有服务器上文件的链接
推荐阅读
- c++ - 如何获得哈希表的最大链的长度?
- java - Java 8基于多个条件和日期对对象的Arraylist进行排序
- python - PyTorch 相同输入不同输出(非随机)
- serial-port - RX/TX 串行通信
- sql - 查询 eloquent 不能 where id = value
- arrays - 如何从数组的最后一个元素开始迭代循环并按顺序进行到下一个?(不倒车)
- java - 在 Spring Boot 中使用 RestClient 对 Rest API 页面进行反序列化
- java - 使用 Spring Boot 战争启动外部 Tom Cat 时出现错误“无法获取 jdbcUrl 的驱动程序实例”
- angular - 用户注销后 Angular Locked 用户名和密码输入
- c - 为什么条件 x!=15 被评估为真给出输出 1