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


Задача программной отдачи файла может встретиться довольно часто, но не многие знают, что в Yii2 есть встроенный методы, помогающие решить проблему отдачи файла в браузер на скачивание. В этой короткой заметке — пример решения задачи. Поехали!

В принципе, все средства описаны в документации. Я лишь приведу несколько примеров и пояснений.

Наиболее полезными и часто используемыми являются два метода:
sendFile
sendContentAsFile

Первый из них отдает в браузер файл, физически существующий на сервере.
Второй — позволяет отдать в браузер некое сгенерированное содержимое (первый параметр) под условным названием (второй параметр). К примеру некий отчет за определенный период — согласитесь, глупо его хранить на сервере, если у Вас тысячи клиентов. Генерируем и отдаём сразу на скачивание.

Пример скачивания выглядит так:

public function actionDownload() {
   $path = \Yii::getAlias('@uploads') ;
   $file = $path . '/some-file.pdf';

   if (file_exists($file)) {
       return \Yii::$app->response->sendFile($file);
   } 
   throw new \Exception('File not found');
}

Также стоит обратить внимание на функцию xSendFile, которая также отдаёт файл в браузер — но использует при этом X-заголовки. Интерфейс вызова схож с описанными выше методами и описан в документации.

Вот так мы можем просто отдавать файлы в браузер на скачивание при помощи Yii2. Удачи.

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *