Возможно ли использовать WordPress Ajax для загрузки файлов. У меня есть эта функция для загрузки вложения.Загрузка файлов с использованием ajax в WordPress
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») или die («Файл не найден.»); «Возможно, файл не найден, но вы скрываете ошибку. Что произойдет, если вы это сделаете? – vaso123
Я пробовал оба, но ничего не происходит. Файл существует, и я установил для него абсолютный путь, и ничего не произошло. –
попробуйте еще 2 вещи. 1-й, попробуйте 'var_dump ($ data);' что он содержит? потому что кажется, что 'json_encode' терпит неудачу. Второй. вы также можете попробовать, что произойдет, если вы вызываете php напрямую. задайте '$ file_path' и' $ file_mime' непосредственно в файле ajax и вызовите этот файл. если все в порядке, то данные неверны, что вы проходите через '$ _POST' – vaso123