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

Пользователь

от magdalen_kub , в категории: PHP , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от richard , 2 года назад

@magdalen_kub 

Для отдачи файла на скачивание в Yii2 используется класс yiiwebResponse. Ниже приведен пример действия контроллера, которое отдаст файл на скачивание в браузер:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public function actionDownloadFile()
{
    // путь к файлу на сервере
    $path = '/path/to/file.pdf';

    // передаем файл в ответ
    if (file_exists($path)) {
        Yii::$app->response->sendFile($path);
    }
}


В этом примере мы проверяем существование файла на сервере и передаем его в ответ браузеру, используя метод sendFile. Метод sendFile самостоятельно задает заголовки ответа для скачивания файла.


Также можно установить дополнительные параметры ответа для скачивания файла, например, имя файла и тип содержимого. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public function actionDownloadFile()
{
    // путь к файлу на сервере
    $path = '/path/to/file.pdf';

    // передаем файл в ответ
    if (file_exists($path)) {
        Yii::$app->response->sendFile($path, 'myfile.pdf', [
            'inline' => false,
            'mimeType' => 'application/pdf',
        ])->send();
        Yii::$app->end();
    }
}


Здесь мы явно указываем имя файла (myfile.pdf) и тип содержимого (application/pdf). С помощью параметра inline мы также задаем режим скачивания файла - не встроенный (inline => false). Метод send вызывается после sendFile для того, чтобы отправить заголовки ответа до отправки файла. В конце необходимо завершить приложение Yii с помощью метода end().