我正在使用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),结果始终相同。
在花了几个小时阅读之后,我没有其他想法可能出错。我相信有人可以给我一些线索:)。
答案 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'))