Скачивание файла с сервера через ajax-запрос

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Maksat1991
Сообщения: 57
Зарегистрирован: 2016.10.16, 00:15

Скачивание файла с сервера через ajax-запрос

Сообщение Maksat1991 »

Есть контроллер, который на основе строк и столбцов генерирует excel-файл.
Нужно, чтобы в браузере кликали на кнопку, отправлялся ajax-запрос, на сервере формировался excel-файл, скачивался клиенту и на сервере удалялся.

Есть метод \Yii::$app->response->sendFile($filePath);

Но, если использовать его в ajax-запросе, то файл не скачивается клиенту. Как можно еще скачать файл?
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Скачивание файла с сервера через ajax-запрос

Сообщение kawabanga »

зачем аякс тут?
Maksat1991
Сообщения: 57
Зарегистрирован: 2016.10.16, 00:15

Re: Скачивание файла с сервера через ajax-запрос

Сообщение Maksat1991 »

kawabanga писал(а): 2017.08.14, 11:46 зачем аякс тут?
Пользователь может нажать/не_нажать на кнопку "Экспортировать в excel". Если нажмет, то файл нужно на сервере сгенерировать, и клиенту через браузер скачать.

Если есть вариант без аякса - ещё лучше.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Скачивание файла с сервера через ajax-запрос

Сообщение someweb »

Не нужен тут ajax, браузер не перейдет на страницу, а просто появится запрос на сохранение файла.
Если у вас блок с ссылкой обернут в pjax выставьте ссылке на загрузку data-pjax = 0
Последний раз редактировалось someweb 2017.08.14, 12:55, всего редактировалось 1 раз.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Скачивание файла с сервера через ajax-запрос

Сообщение vitalik1183 »

и что? а нафига здесь переход на страницу?

Сохранить файл в фс:

Код: Выделить всё

$phpExcelWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');
        $phpExcelWriter->save(\Yii::getAlias('@export') . '/' . $name);
Выдать сразу на скачку(после генерации):

Код: Выделить всё

header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="file.xls"');
$phpExcelWriter->save('php://output');
Yii2!
Ответить