2014-11-05 60 views
6

我在使用FileSaver.jsBlob.js到Angular JS应用程序中以保存由REST服务(返回表示文件的字节数组)返回的PDF。保存由服务返回的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'); 
    }); 

该文件被保存为正确的类型和页数是正确的,但它是完全空白的。 用编辑器打开它,结果证明它只包含服务器返回的数据的第一部分,就像它被截断一样。

感谢大家帮忙!

+1

你解决了吗? – ronnyfm 2015-02-23 23:00:29

+0

同样的问题在这里.. ;-)你有没有找到解决方案?谢谢。 – 2015-08-10 13:47:23

+0

也卡在这。 – user2085143 2015-11-10 17:46:37

回答

7

$ http.get可能不会正确处理二进制数据。尝试使用$http({method: "GET", url: URL, responseType: "arraybuffer", ...})(see angularjs)来获取可以放入数据的二进制对象。

你也可以使用responseType: "blob"所以你甚至不需要创建var blob,但我认为responseType的浏览器支持较少。

0

将配置参数的响应类型添加到我的工作。试试:

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'); 
     });