Только запросы Ajax не могут вызвать загрузку.У вас может быть скрытая форма, которая отправляет ваши данные в конечную точку API, возможно, самое быстрое решение.
У Axios есть встроенный способ сделать это легко
axios({
method: 'post',
url: '/api/quotes/finalize',
data: wizardModelFormData,
config: { headers: {'Content-Type': 'multipart/form-data' }}
})
Вместо того, чтобы отправлять JSON в запросе, вам придется отправлять данные формы. Это довольноЛегко настроить объект данных формы, и быстрого Google на FormData должно быть достаточно.
Другой способ сделать что-то вроде этого.Пусть конечная точка вернет URL-адрес загрузки для вашего файла
if ($data['actions']['downloadPDF']) {
return response()->json(["download_url" => "/api/download/" . $fileName]);
}
, а на стороне клиента используйте window.location
, чтобы установить местоположение браузера для этой конечной точки API, которая будет возвращать только файлы (в данном случае / api /скачать / {имя_файла}).После этого браузер загрузит любой файл, возвращенный из указанного вами местоположения (если вы правильно настроили заголовки).
Это будет означать, что вам придется реализовать маршрут / api / download / {fileName}, но этоэто то место, куда вы бы поместили что-то вроде этого.
return response()->download(public_path('storage/' . $fileName));
Очевидно, что это просто простое объяснение, и его не нужно реализовывать точно так же, но оно помогает понять идею.
Теперь вам нужно убедиться, что вы не помещаете какие-либо конфиденциальные файлы в хранилище / и не настроили некоторые разрешения.