JQuery — AJAX + PHP + Скачать сгенерированный файл mPDF

Я создаю приложение, в котором у пользователя есть доступ к просмотру множества PDF, представленных ему в виде таблицы. Каждая строка также имеет флажок, который позволяет пользователю проверять или нет для следующего действия, которое я опишу позже.

Эти флажки находятся внутри тегов формы, и после этого есть кнопка отправки, которая отправляет ID всех файлов внутри массива методом POST через AJAX REQUEST в файл PHP.

Запрос AJAX выглядит следующим образом:

$.ajax({
url: link,
type: 'POST',
data: $(this).serialize(),
success: function(result) {

if (result == 'ok') {

if (redirect) {
window.location.replace(redirect);
} else {
window.location.reload();
}

} else {

if (callback) {
$('#' + callback).html('<div>' + result + '</div>');
} else {
alert(result);
}

}

}
});

Так что ничего особенного, все данные поста берут и отправляют в конкретный файл PHP.

Далее, на стороне PHP-файла — есть алгоритм, который проверяет, есть ли у пользователя доступ ко всем файлам по полученным идентификаторам метода записи. Таким образом, есть простой цикл в сочетании с запросом SQL.

Когда LOOP проверяет, что у него есть действительный доступ — я создаю один большой файл, состоящий из всех файлов, которые он выбрал с помощью предыдущих флажков. В этом случае я использую mPDF, и объединение файлов для меня не проблема.

Затем объединенный файл создается на сервере и имеет определенное имя.

А теперь — как я уже говорил, этот файл должен быть очень закрытым, поэтому после того, как пользователь загрузит его, я хочу, чтобы скрипт также удалил этот файл. Но я не могу справиться с частью загрузки.

Я пытался отправить заголовки со стороны PHP-файла, но это заканчивается, как будто странные символы выводятся в элемент div обратного вызова вместо отображения диалога загрузки.

Мой код для отправки заголовков выглядит ниже

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists

header('Content-type:  application/download'); //or event tried with application/pdf => no difference
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="'. $file .'"');
return readfile($file);

Для краткости вместо диалогового окна + загрузка — странные символы покрывают область обратного вызова.

Если вы, ребята, знаете, что происходит и что я должен сделать в этом конкретном сценарии, я буду рад помощи. Кроме того, я буду более благодарен, если вы предложите мне, что делать с удалением файла после того, как пользователь загрузит его, или даже отмените диалоговое окно с приглашением, чтобы файл больше не оставался на сервере.

1

Решение

Вам нужно вернуть ссылку на ваш файл из ajax

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
echo $file;

в вашем успехе ajax вы просто открываете новое окно для этого файла;

success: function(file) {
window.open(file);
}

Другое решение будет использовать скрытую ссылку для скачивания

  success: function(file) {
$('body').append('<a href="'+file+'" class="hiddenLink" download style="display:none;"></a>');
$('.hiddenLink').trigger('click');//or $('.hiddenLink')[0].click();
}
1

Другие решения

Это сработало для меня.

success: function(response) {
i++;
$('#buttonid').append('<a href="'+response+'" class="hiddenlink" download style="display:none"></a>');
if(i == 1){
$('.hiddenlink')[0].click();
} else {
i=0;
$('.hiddenlink').remove();
}
}

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector