Загрузка файла с приложения Laravel

122
20 января 2021, 00:00

Всем привет. Есть код, который делает запрос к api, ответ парсится в формат json. Примерный код ответа:

{
    success: true,
    data: {
        articles: [
           [
              'name': 'Test name',
              'body': 'Lorem it...',
              'file': 'http:://domain.com/api/donwload/articles/12345.pdf'
           ],
           [...]
        ]
    }
}

Всё это добро рендерится на странице. Пользователю необходимо скачать файл, но при прямом переходе по ссылке она не сработает, поскольку api требует заголовки api-key и api-user. Решил попробовать создать контроллер посередине, который отправляет запрос(с нужными заголовками) на получение файла:

$response = $this->sendApiRequest(true, [], '/library/test/download');
return $response;

Код Api:

$file = Storage::disk('downloads')->path('library/e8ebaf574813227adaec1559309870/dc5a4360bd40b3393ae9/Yor6gpYzC8gEPOBogvzb8F84H1gB3znIQxqNOlCs.pdf');
return response()->download($file);

Клиенту в браузере выводятся примерно такие кракозябры(байт-код):

%PDF-1.6 %���� 10514 0 obj <>stream h���]���y �Ҁov/�d����z�64�+A�c�<��&�ɯ_���9��gz�l�  ��GoU��^�ɗu��i]�K�L�/�� �˺�M�u���˚�T���ּ�h���k�zٖ��(]�}�K�]�����=��j��iޏh���Z�c��\�cΰ�����b�f;�9����o��RRێy㼗Q�c��ǒ�v�=�K �eK���~�w    SMp�.1�9�$�x�i�m��2�1���1��k�^�4-e�uO�5�%�\����)����la����2��p�=m�y����2o����������

Как мне правильно обработать ответ и дать возможность клиенту загрузить файл? Или же есть более элегантные способы решения для загрузки файлов? Буду рад любым советам.

Answer 1

Для меня работает это, но в переменную $file Вам нужно положить содержимое файла (не просто путь к файлу):

return new Response($file, 200, [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' =>  'attachment; filename="'.$fileName.'"'
        ]);

Была у меня ещё когда-то проблема с кодировкой содержимого файла, эту проблему тогда решил iconv(). Но он поможет только в том случае, если Вы знаете какая кодировка на входе.

READ ALSO
Проблемы с загружаемым архивом

Проблемы с загружаемым архивом

Отправляю на сервер архив через OkHttp 312

105
PHPMailer не отправляет файл

PHPMailer не отправляет файл

Реализую отправку zip файла на почту PHPMailer'ом, используя smtpgmail

118
Как исключить теги из поиска?

Как исключить теги из поиска?

У меня в базе хранится html-код и мне нужно выполнить поиск по содержимому тегов, не затрагивая сами тегиНапример, при поиске script не выводить...

101