Laravel - Ответ файла PDF возвращает странный текст вместо отображения PDF в браузере - PullRequest
0 голосов
/ 31 августа 2018

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

К моей проблеме: я хочу загрузить pdf-файлы в каталог хранилища, а затем сделать их доступными для пользователей, нажимающих на простую кнопку (используя jquery ajax post request). Загрузка работает нормально, и PDF оказывается в правильном каталоге, как гласит заголовок, возвращая файл, работает хорошо, но вместо отображения pdf в браузере он просто возвращает для большинства частей странно закодированную строку, начиная со следующего:

% PDF-1.3 % ÂãÏÓ

Мой код jQuery:

$('input.btn-pdf').click(function () {
    event.preventDefault();
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    $.ajax({
        url: '/big-picture/getPDF',
        type: 'POST',
        data: {'filename':$(this).val()},
        success: function (data) {
        }
    });
});

После нажатия кнопки в качестве пользователя файлы PDF не должны загружаться немедленно, поэтому я обратился к документации Laravel (5.6) и использовал соответствующий метод ответа, как указано ниже, в моем контроллере:

 public function getPDF(Request $request)
{
    $headers = [
        'Access-Control-Allow-Origin' => '*',
        'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, PATCH, DELETE',
        'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers',
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'inline'
        ];
    return response()->file(storage_path("app\pdfs\\".$request->filename), $headers);
}

Как я уже сказал, он находит файл, и я не получаю никаких ошибок (код состояния 200). Я не смог найти никакой информации о том, что мне нужно что-либо делать в представлении или в области успеха моего вызова jjery ajax после возврата файла в качестве ответа, чтобы правильно его отобразить. Я также проверил тип файла, прежде чем вернуть его, и он правильно сказал 'application / pdf'. Сначала я получил много сообщений об ошибках, а потом обнаружил, что для правильной работы нужно использовать правильные заголовки, что я и сделал. Теперь это должно работать, но это не так.

Это заголовок ответа:

Диапазон принятия: нет Access-Control-Allow-Headers: Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Тип контента, Access-Control-Request-Method, Авторизация, Access-Control- Запрос-заголовки Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Cache-Control: public Соединение: закрыть Content-Disposition: встроенный Длина содержимого: 1650653 Тип содержимого: application / pdf Дата: Пт, 31 августа 2018 09:51:04 GMT Дата: Пт, 31 августа 2018 09:51:04 +0000 Хост: localhost: 8000 Дата последнего изменения: чт, 30 августа 2018 г. 09:30:39 GMT Set-Cookie: XSRF-TOKEN = aLongTokenHere; истекает = пт, 31 августа 2018 11:51:04 по Гринвичу; Max-Age = 7200; Путь = / Set-Cookie: laravel_session = aLongSessionIdHere; истекает = пт, 31 августа 2018 11:51:04 по Гринвичу; Max-Age = 7200; Путь = /; HttpOnly X-Powered-By: PHP / 7.2.4

Заранее спасибо. Меня интересует не только решение этой проблемы, но если у кого-то есть иное представление о плавном и интеллектуальном хранении PDF-файлов для моего конкретного случая использования и их возврате / отображении, я более чем готов изменить свой способ сделать это.

Всем вам хорошего дня.

1 Ответ

0 голосов
/ 08 сентября 2018

Мой обходной путь:

Вместо того, чтобы использовать локальное хранилище laravel, я буду использовать Drop Box для хранения PDF-файлов и просто помещать отображаемые ссылки на PDF-файлы в моей базе данных, которые позже будут переданы в мое представление.

Не решение, которое я надеялся закончить, но оно работает. Может быть, это полезно для других.

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