Отдать файл на скачивание

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
denis2488
Сообщения: 5
Зарегистрирован: 2022.09.29, 12:55

Отдать файл на скачивание

Сообщение denis2488 »

Как правильно реализовать отдачу файлов с сервера пользователю? Файлы хранятся по пути: web\uploads\files\documents Добавил в 'columns' следующий код:

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

[
            'label'=>'Скачать файл',
            'format' => 'raw',
            'value'=>function ($data) {
                return Html::a('Скачать файл', ['ссылка на url файла']);
            },
        ],
        
Подскажите, как реализовать отдачу файлов с сервера? Правильно прописать в контроллере экшн actionDownload и как сформировать ссылку на url файл для скачивания.
leonid52
Сообщения: 1
Зарегистрирован: 2022.11.10, 13:35

Re: Отдать файл на скачивание

Сообщение leonid52 »

Почитайте об Yii::$app->response->sendFile

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

return Yii::$app->response->sendFile($file->filePath, "{$file->name}");
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: Отдать файл на скачивание

Сообщение Ghost_nsk »

1) если файл публичный, то просто используешь абсолютную ссылку типа https://domain.ru/some/file/path.jpg
2) если файл приватный (не доступен для прямой скачки из паблика), то можешь запилить специальный экшен, и отдавать через

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

public function actionDownload(){
  // тут какая то логика
  // какой файл нужен отдать юзеру
  // возможно через GET параметры экшена понадобится указать id / путь
  // там уже сам смотри что тебе необходимо  
  $filePath = Yii::getAlias('...').'/file.jpg';
  $fileName = 'какое-то название картинки.jpg';
  
  // check file is existed
  if (is_file($filePath)) {
    return Yii::$app->response->sendFile($filePath, $fileName);
  }
  
  // throw an exception
  throw new BadRequestHttpException('No file');
}
Ответить