【发布时间】:2017-06-07 16:35:24
【问题描述】:
我尝试使用 FileSaver 从服务器下载生成的 PDF。但是,它不起作用。
在 Laravel 框架中,我使用 Snappy 从 HTML 创建 PDF 文件。
$pdf = \PDF::loadView('pub.view', $data);
//$pdf->save('myfile.pdf'); //It's saved successfully.
return $pdf->download('printing.pdf');
从客户端,我应用 AngularJS 的 $resource 服务来获取 PDF 文件。
printPDF: {
method: 'GET',
headers: {
accept: 'application/pdf'
},
responseType: 'arraybuffer',
cache: true,
transformResponse: function (data) {
var pdf;
if (data) {
pdf = new Blob([data], {
type: 'application/pdf'
});
}
return {
response: pdf
};
},
url:'/u/:id/exportTopdf',
params:{id:'@id'}
}
服务器响应后,FileSaver 将保存此文件。
myService.printPDF({id: myId},
function successCallback(response){
saveAs(response, 'filename.pdf'); //FileSaver function
}, function errorCallback(response){
});
运行时,问题出现在浏览器控制台中:
`TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided`.
我认为 FileSaver 会导致问题,但我不知道如何解决。
【问题讨论】:
-
我修好了。我的问题是响应不是 blob 文件。响应是对象。我必须提取 blob 数据作为响应并放入 saveAs 函数。我通过浏览器的下载器下载它。但是,FDM(免费下载管理器)在浏览器下载后捕获它。如何让 FDM 在浏览器之前捕获它?
-
FDM(免费下载管理器)无法下载 blob 文件。
标签: angularjs laravel pdf filesaver.js