是否可以使用WordPress Ajax下载文件。我有这个功能来下载附件。
function download_attachment()
{
$file_path = $_POST['filename'];
$file_mime = $_POST['mime'];
$data['file_path'] = file_exists($file_path);
try{
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_path)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: '.$file_mime);
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file_path)); // provide file size
header('Connection: close');
set_time_limit(0);
@readfile("$file_path") or die("File not found.");
}catch(Exception $e)
{
$data['error'] = $e->getMessage() ." @ ". $e->getFile() .' - '. $e->getLine();
}
}
echo json_encode($data);
die();
}
使用此函数连接到WordPress主函数:
add_action('wp_ajax_download_attachment','download_attachment');
jQuery代码是这样的:
var data = {
'function': 'download_attachment',
'filename': file_path,
'mime': mime
};
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: data,
success: function(return_data, textStatus, jqXHR) {
parsedData = kalimahJS.parseJSON(return_data);
window.open(parsedData.url);
}
})
屏幕上显示最终结果为0。还有另一种方法吗?
答案 0 :(得分:0)
尝试添加以下代码
add_action( 'wp_ajax_nopriv_download_attachment', 'download_attachment' );
答案 1 :(得分:0)
好。
我来到这里,2年后(几乎完全),从近5年前发布一个更老的答案的链接:
https://stackoverflow.com/a/6668806/1356098
AJAX不适合下载文件。弹出一个新窗口,下载链接作为其地址,或
window.location = ...
。
注意:我按照@yitwail 的建议将代码更改为window.location
仍然......我在这里找到了一些有用的信息:https://marksdevserver.com/2011/03/10/downloading-file-ajax/