[英]Angular - Download and Display PDF
目前正在使用
https://github.com/stranger82/angular-utf8-base64
和
https://github.com/eligrey/FileSaver.js/
解码我从其他API提取的base64编码的PDF文件。
它可以解码和下载就很好,但是当我尝试查看它时,它是空白的。
我看过
AngularJS:在角度应用程序中显示blob(.pdf)
并尝试添加
responseType: 'arraybuffer'
但是,对于我的get请求,这将导致响应为null,并且get请求未返回任何数据。
其他文件似乎可以下载并呈现正常。
一如既往,任何帮助将不胜感激!
码:
function save() {
var fileContent = base64.decode(response.File.fileContent);
var file = new Blob([fileContent], {type: response.File.contentType});
saveAs(file, response.File.name);
}
$http.get(url.join('')).success(function(response) {
save(response);
}).error(function(error) {
console.log('The following error has occured' + error);
});
万一API Rest检索字节数组,您可以简单地使用此js函数
OBS:data.payload必须是字节数组调用函数:DownloadService.download(data.payload,'downloadExcel','xls'); DownloadService.download(data.payload,'downloadPDF','pdf');
(function() {
'use strict';
angular
.module('fileUtils')
.service('DownloadService', DownloadService);
DownloadService.$inject = ['$window'];
function DownloadService($window) { // jshint ignore:line
this.download = function (fileBytes, name, type) {
var fileName = '';
if (name) {
fileName = name + '.' + type;
} else {
fileName = 'download.' + type;
}
var byteCharacters = atob(fileBytes);
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 file = new Blob([byteArray], { type: 'application/' + type });
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(file, fileName);
} else {
//trick to download store a file having its URL
var fileURL = URL.createObjectURL(file);
var a = document.createElement('a');
a.href = fileURL;
a.target = '_blank';
a.download = fileName;
document.body.appendChild(a);
a.click();
}
};
}
})();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.