2014-10-27 8 views
1

Возможно ли использовать 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 отображается на экране. Есть ли другой способ сделать это?

+0

попробовать удалить Погасить на здесь '@readfile («$ file_path») или die («Файл не найден.»); «Возможно, файл не найден, но вы скрываете ошибку. Что произойдет, если вы это сделаете? – vaso123

+0

Я пробовал оба, но ничего не происходит. Файл существует, и я установил для него абсолютный путь, и ничего не произошло. –

+0

попробуйте еще 2 вещи. 1-й, попробуйте 'var_dump ($ data);' что он содержит? потому что кажется, что 'json_encode' терпит неудачу. Второй. вы также можете попробовать, что произойдет, если вы вызываете php напрямую. задайте '$ file_path' и' $ file_mime' непосредственно в файле ajax и вызовите этот файл. если все в порядке, то данные неверны, что вы проходите через '$ _POST' – vaso123

ответ

0

Попробуйте добавить следующий код также

add_action('wp_ajax_nopriv_download_attachment', 'download_attachment'); 
+1

Я добавил, и я получил тот же результат. –

+0

не удается загрузить данные Ajax. – huykon225

0

Хорошо.

Я пришел сюда, спустя 2 года (почти точно), чтобы отправить ссылку на ответ даже старше, из почти 5 лет назад:

https://stackoverflow.com/a/6668806/1356098

AJAX не для загрузки файлов , Выскажите новое окно со ссылкой для загрузки в качестве его адреса или сделайте window.location = ....

Примечание: Я изменил код window.location как предложено @yitwail

Тем не менее ... Я нашел некоторую полезную информацию здесь: https://marksdevserver.com/2011/03/10/downloading-file-ajax/

Смежные вопросы