保存服务返回的PDF

时间:2014-11-05 10:03:54

标签: javascript angularjs pdf

我在Angular JS应用程序中使用FileSaver.jsBlob.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');
    });

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

感谢大家帮忙!

2 个答案:

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