#javascript #laravel #laravel-5
#javascript #laravel #laravel-5
Вопрос:
На стороне клиента я делаю 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);
В ответ он возвращает мне двоичный файл:
Заголовки ответа являются:
Комментарии:
1. я думаю, вам нужно будет использовать
return response()->file()
вместоresponse()->download()
2. Я попробовал, это дает мне тот же результат
3. может быть, вам нужно передать заголовок Content-Size?
4. Я пробовал, никакого результата, он всегда возвращает мне двоичный файл в ответ
Ответ №1:
Попробуйте использовать:
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-запрос, верните 204
http-код с Location
заголовком.
return response()->header('Location', $url)
Когда вызывается событие успеха AJAX, выполните:
success: function(data, textStatus, request) {
window.open(request.getResponseHeader('Location'), '_blank');
}
Комментарии:
1. Тот же результат, возможно, проблема в запросе POST?
2. @OPV я думаю (если это вызов ajax), вам будет лучше открыть новую вкладку в вашем браузере
3. Я попытался открыть в новой вкладке полный путь к файлу, без результата
4. И почему вы выполняете POST-запрос?
5. Конечно, он возвращает мне также двоичный контент