首先,我知道这不是强制文件下载的最佳方式,它很糟糕而且很可怕,但是嘿,我只是被告知要做什么!
所以我安装了WP,我正试图利用WP AJAX来下载文件。
我的表单在functions.php中遇到一个AJAX回调,在做了n个部分后,我正在使用这个函数:
function download_file()
{
$file = get_template_directory()."/a_pdf_file.pdf";
if(file_exists($file)) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
else
{
die('The provided file path is not valid.');
}
}
问题是,缓冲区只是在AJAX响应中吐出。没有下载文件。
我是否需要在AJAX端做一些事情,在成功回调中可能?
我尝试的其他选项似乎也失败了。
header('Location: $file_url');
不起作用window.open(url, '_blank')
作为弹出窗口被阻止window.location()
在同一窗口中打开,不接受答案 0 :(得分:0)
Ajax无法直接下载文件,而是需要在其自己的框架中打开它。如果你使用jquery,你可以像这样动态创建自己的隐形iframe。这是来自我的代码,但是在这里摆脱jquery不应该那么难。
function downloadUrl(url) {
var iframe = document.createElement("iframe");
iframe.src = url;
$(iframe).hide();
document.body.appendChild(iframe);
$(iframe).load(function() {
//Show error, if call returned an error instead of a file
var cont = $(iframe).contents().find("body");
if (cont.text().length != 0)
alert(cont.text());
});
}