是否可以使用WordPress Ajax下載文件。我有這個功能來下載附件。在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顯示在屏幕上。有沒有另一種方法來做到這一點?
儘量去除抑制在這裏'@readfile (「$ file_path」)或死(「File not found。」);'也許文件未找到,但是你隱藏了錯誤。如果你這樣做會怎樣? – vaso123 2014-10-27 09:25:32
我嘗試過但沒有任何反應。該文件確實存在,我已經放置了一個絕對路徑並沒有發生任何事情。 – 2014-10-27 09:32:49
嘗試2件事。第一,嘗試'var_dump($ data);'它包含什麼?因爲看起來'json_encode'失敗。第2位。你也可以嘗試一下,如果你直接調用php,會發生什麼。直接在ajax文件中設置'$ file_path'和'$ file_mime',然後調用該文件。如果沒關係,那麼數據是不正確的,你通過'$ _POST' – vaso123 2014-10-27 10:49:38