Как сказать браузер, чтобы начать загрузку файла? - PullRequest
0 голосов
/ 31 марта 2019

На стороне клиента я делаю POST-запрос к Laravel, чтобы вернуть файл в браузер:

$headers = [
             'Content-Type' => 'application/vnd.ms-excel',
             'Content-Disposition' => "attachment; filename='Report.xls'"
        ];

        return response()->download(storage_path('app/'.$path.$filename), $filename, $headers);

Он возвращает мне двоичный файл в ответ:

enter image description here

Заголовки ответа:

enter image description here

1 Ответ

1 голос
/ 31 марта 2019

Попробуйте использовать:

return Storage::download('file.jpg', $name, $headers);

Ссылка: https://laravel.com/docs/5.8/filesystem#downloading-files

РЕДАКТИРОВАТЬ 1:

Возможное решение:

Создать маршрут для получения документа xls (с помощью метода GET http) по его имени, например, который возвращает:

return Storage::download('file.jpg', $name, $headers);

Сделайте запрос POST, верните http-код 204 и с заголовком Location.

return response()->header('Location', $url)

Когда вызывается событие успеха AJAX, выполните:

success: function(data, textStatus, request) {
    window.open(request.getResponseHeader('Location'), '_blank');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...