我在Angular JS应用程序中使用FileSaver.js和Blob.js来保存REST服务返回的PDF(返回表示文件的字节数组)。
var headers = {headers: {"Authorization":"Bearer "+token, "Accept":"application/pdf"}};
$http.get(URL, headers)
.success(function (data) {
var blob = new Blob([data], {type: 'application/pdf'});
saveAs(blob, 'contract.pdf');
});
文件以正确的类型保存,页面数量正确,但它完全空白。 用编辑器打开它,结果表明它只包含服务器返回的数据的第一部分,就像它被截断一样。
感谢大家帮忙!
答案 0 :(得分:8)
$ http.get可能无法正确处理二进制数据。尝试使用$http({method: "GET", url: URL, responseType: "arraybuffer", ...})
(see angularjs)获取可以输入数据的二进制对象。
您也可以使用responseType: "blob"
,因此您甚至不必创建var blob
,但我认为responseType对浏览器的支持较少。
答案 1 :(得分:0)
为config参数添加响应类型对我有用。尝试:
var config = { responseType: 'blob', headers: {"Authorization":"Bearer "+token,
"Accept":"application/pdf"}};
$http.get(URL, config)
.success(function (data) {
var blob = new Blob([data], {type: 'application/pdf'});
saveAs(blob, 'contract.pdf');
});