В настоящее время я пытаюсь загрузить файл с моего сервера с помощью запроса PHP AJAX. Я построил это так:
Сначала я получаю все файлы (в этом примере только один) и создаю ссылку:
$invoice_number_base = 'RE-2018-12-00000039-E';
//Get all generated PDF file names by tmp path and invoice number base
foreach ( glob( '/var/www/vhosts/localhost/httpdocs/wp-content/uploads/wpo_wcpdf/attachments/' . $invoice_number_base . '*.pdf' ) as $file ) { ?>
<a target="_blank" class="admin_et_pb_button"
onclick="showGenInvoice('<?php echo $file ?>')">
<?php echo basename( $file ) ?>
</a>
<?php }
Здесь генерируется эта ссылка
<a target="_blank" class="admin_et_pb_button" onclick="showGenInvoice('/var/www/vhosts/localhost/httpdocs/wp-content/uploads/wpo_wcpdf/attachments/RE-2018-12-00000039-E.pdf')">RE-2018-12-00000039-E.pdf</a>
Теперь я создал свою функцию JS для вызова функции AJAX, когда пользователь нажимает кнопку:
function showGenInvoice(file) {
var data = {
'action': 'show_gen_invoice',
'file': file
};
jQuery.post(ajaxurl, data, function () {
}).fail(function () {
alert('An error occured!')
});
}
(функция имеет ссылку на параметр, которая содержит путь к каждому файлу на моем сервере)
После этого я создаю обратный вызов AJAX в WordPress:
/**
* Get generated invoice from attachments folder so the invoices which are sent by email
*/
add_action( 'wp_ajax_show_gen_invoice', array( $this, 'show_gen_invoice' ) );
public function show_gen_invoice() {
//Get file path from request
$file = $_POST['file'];
if ( is_admin() && file_exists( $file ) ) {
header( 'Content-Description: File Transfer' );
header( 'Content-Type: application/octet-stream' );
header( 'Content-Disposition: attachment; filename="' . basename( $file ) . '"' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate' );
header( 'Pragma: public' );
header( 'Content-Length: ' . filesize( $file ) );
ob_clean();
flush();
readfile( $file );
wp_die();
} else {
wp_send_json_error( null, 500 );
wp_die();
}
}
Но, к сожалению, файл не загружается, когда я нажимаю кнопку. Нет ошибок, просто ничего не происходит. Что здесь не так?
Примечание:
Папка, в которой находится файл, защищена и недоступна
с обычным URL страницы и /uploads/...
Обновление
Пожалуйста, проверьте мое решение! Его можно использовать, когда вы хотите загрузить что-то со своего сервера из серверной части с помощью PHP.