我有一个AJAX调用,调用一个安全的PHP API调用,生成PDF文件数据(动态,没有实际文件)并返回它。如何在javascript / jquery中使用此PDF文件数据来创建PDF文件并将其下载给用户?
我最初尝试将ajax调用的头部设置为PDF格式,但显然你无法通过ajax下载文件。
答案 0 :(得分:0)
要从ajax调用自动下载文件,您可以执行以下操作。在我的示例中,我返回了一个包含文件名,mime类型和Base64数据的对象,但这可能会让您了解如何执行您要查找的内容。
PostDTO('/ReportService.asmx/DownloadReport', dto, function (result) {
var a = document.createElement('a');
if (window.URL && window.Blob && ('download' in a) && window.atob) {
// Do it the HTML5 compliant way
var blob = base64ToBlob(result.FileDataBase64, result.MimeType);
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = result.Filename;
a.click();
window.URL.revokeObjectURL(url);
}
});
function base64ToBlob(base64, mimetype, slicesize) {
if (!window.atob || !window.Uint8Array) {
// The current browser doesn't have the atob function. Cannot continue
return null;
}
mimetype = mimetype || '';
slicesize = slicesize || 512;
var bytechars = atob(base64);
var bytearrays = [];
for (var offset = 0; offset < bytechars.length; offset += slicesize) {
var slice = bytechars.slice(offset, offset + slicesize);
var bytenums = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
bytenums[i] = slice.charCodeAt(i);
}
var bytearray = new Uint8Array(bytenums);
bytearrays[bytearrays.length] = bytearray;
}
return new Blob(bytearrays, { type: mimetype });
};
答案 1 :(得分:0)
您可以从ajax下载文件。 我是通过角度应用程序完成的。 想法:
您可以验证通过控制台生成的blob,显示blob网址。该网址必须打开您的PDF格式。