AngularFileSaver保存损坏的文件

时间:2016-08-27 16:29:18

标签: php angularjs

我正在使用wkhtmltopdf在服务器端生成pdf,还使用PHP gd lib在图像上应用文本。它们都是通过REST API发送的,以允许用户下载它们(pdf和jpg有不同的方法)。

在客户端,我正在使用AngularFileSaver for webpack,它使用Blob和FileSaver服务,但它工作不正常,因为保存的文件被破坏(pdf为空,jpg无法显示图像)。

我很确定这不是服务器端sripts的问题,因为我在我的其他项目中使用了wkhtmltopdf而且很好。

这是我的客户端代码:

$.ajax({
  type: 'GET',
  url: '/cloud/files/pdf',
  headers : {
    'Authorization' : 'some_token',
    'Content-Type'  : 'application/pdf'
  },
  responseType : 'blob'
}).done(function(data) {
  var fileName = "sample.pdf";
  var file = new Blob([data], {type: 'application/pdf'});
  FileSaver.saveAs(file, fileName);
});

我尝试使用Blob的不同'type'属性,以及ajax的responseType(blob或arrayBuffer),结果始终相同。

在花了几个小时阅读之后,我没有其他想法可能出错。我相信有人可以给我一些线索:)。

1 个答案:

答案 0 :(得分:0)

jQuery的ajax和responsetype从未奏效。由于你正在处理二进制数据而jQuery响应总是文本,这可能导致保存的文件被破坏 - 我建议你放弃jQuery并使用XHR或fetch

fetch(url, {
    headers: {Authorization : 'some_token'}
})
.then(res => res.blob())
.then(blob => saveAs(blob, 'sample.pdf'))