@LikeSD
Системный администратор

Как отдать файл на скачивание в Yii2?

Всеб здравствуйте.
На странице с помощью Ajax передаю в контроллер данные. В этом контроллере создаю word файл и хочу отдать его на скачивание, но он не скачивается.

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($word, 'Word2007');
        $dir = 'files/';
        $files_dir = Yii::getAlias('@webroot')."/".$dir;
        $file = str_replace("/","-", "Report-".date("d-m-Y")).".docx";
        $objWriter->save($files_dir.$file);
        return Yii::$app->response->xSendFile($files_dir.$file, $file)->send();


В ответе показывает, что все отлично.
63f3820f372b6551849798.png

Подскажите, что я делаю не так? Почему не скачивается?
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
@LikeSD Автор вопроса
Системный администратор
Как я и предполагал, никаких проблем с конфигом сервера. Вся соль была в том, что запрос отправляется с помощью Ajax. Что бы решить проблему надо в return метода отдать свформированную ссылку в формате jsone.

$downloadurl = [
            'url' => '/web/files/' . $file,
        ];

        return json_encode($downloadurl);


А в скрипте, который отправляет данные, добавить строки:

.then((data) => {
            window.open(data.url);
        })
        error: (function(e) {
            console.log(e);
        })
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@humoured
Вы всё на свете найдёте в коробке с карандашами
Какой веб-сервер используется?
Нужно включить в конфигурации сервера обработку заголовков, генерируемый кодом Yii.
Ответ написан
@pantsarny
https://www.yiiframework.com/doc/api/2.0/yii-web-r...
Вам нужен модуль X-sendfile для индейца, для использования этой функции
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы