Итак, я объясню проблему:
Шаги:
1) клиент (javascript браузера) отправляет Ajax-запрос на сервер, который выполняет метод контроллера, называемый загрузкой.
2) метод контроллера создает ресурс PDF (без сохранения в файловой системе) и возвращает ответ с двоичным потоком PDF обратно клиенту.
3) клиент получает двоичный поток PDF и загружает егоэто на компьютере клиента.Это возможно?
Код: Вещи, которые я уже пробовал -
На стороне клиента:
<script>
(function($) {
var button; // some random DOM button
button.on('click', function(e) {
e.preventDefault();
$.ajax({
url: "/download/:userId"
method: "POST",
dataType: "json"
success: function(response) {
var reader = new FileReader;
var file = new Blob([response.pdf_stream], 'application/pdf');
// create a generic download link
var a = $('<a/>', {
href: file,
download: response.filename
});
// trigger click event on that generic link.
a.get(0).click();
}
});
}
})(jQuery);
</script>
На стороне сервера:
class Controller
{
public function download($userId)
{
// fetching the user from the database
$user = User::find($userId);
// creating a pdf file using barry pdfdom package
// this will actually parse an HTML view and give us the PDF blob.
$pdf = PDF::loadView('pdf.view')->output();
// using Laravel helper function
return response()->json([
'pdf_stream' => utf8_encode($pdf),
'filename' => 'blahblah.pdf"
]);
// Or if you will in native PHP, just in case you don't use laravel.
echo json_encode([
'pdf_stream' => utf8_encode($pdf),
'filename' => 'blahblah.pdf"
]);
}
}
ЛюбыеИдея, что я здесь делаю не так?Как я могу загрузить этот PDF-файл, не сохраняя его в системе (проблемы безопасности и пространства).
Буду признателен за любую помощь.
Eden