Скачать PDF ресурс из PHP в Javascript через Ajax - PullRequest
0 голосов
/ 06 июня 2018

Итак, я объясню проблему:

Шаги:

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

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Основная проблема - возвращенный ответ от контроллера.Попробуйте это:

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();
      return response($pdf, 200,
        [
          'Content-Type'   => 'application/pdf',
          'Content-Length' =>  strlen($pdf),
          'Cache-Control'  => 'private, max-age=0, must-revalidate',
          'Pragma'         => 'public'
        ]
      );

О вызове маршрута, который выполняет download($userid) метод:

Вам не нужно использовать Ajax.Простой способ:

<a href="/path/to/download/1" target="_blank">Click view PDF</a>
0 голосов
/ 06 июня 2018

Если вы хотите скачать PDF на стороне клиента, просто откройте этот PDF в новом окне.Используйте запрос GET для таких вещей, как в приложении RESTfull (например, download / user /: id или как-то так).

Может быть полезно: Скачать и открыть PDF-файл, используя Ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...