Скачивание файлов с использованием мультимедийного представления в CakePHP - PullRequest
2 голосов
/ 05 февраля 2011

Я хочу скачать 4 разных файла по 4 разным ссылкам.Я использую представление «Медиа» для загрузки файлов, но мне нужно жестко указать имя файла в функциях загрузки в контроллере:

function download () { 
    $this->view = 'Media'; 
    $params = array( 
          'id' => 'example.zip', 
          'name' => 'example', 
          'download' => true, 
          'extension' => 'zip', 
          'path' => APP . 'files' . DS 
   ); 
   $this->set($params); 
} 

. Это прекрасно работает для одного файла.Теперь, для ссылок с номерами 2,3,4, мне нужно создать 3 разных действия и дать им разные имена файлов, или есть способ, которым я могу использовать download (), чтобы загружать только соответствующий файл в зависимости от того, какая ссылкабыла нажата?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2011

Вот для чего переменные.Общий пример:

function download($fileId) {
    $file = // find the file you want to serve based on $fileId
    $pathInfo = pathinfo($file['path']);

    $this->view = 'Media'; 
    $params = array( 
          'id'        => $file['name'],
          'name'      => $pathInfo['filename'], 
          'extension' => $pathInfo['extension'], 
          'download'  => true, 
          'path'      => APP . 'files' . DS 
   ); 
   $this->set($params); 
} 
2 голосов
/ 15 января 2013

В CakePhp 2.x вы получите ошибку The view for YourController::download() was not found.

Используйте поле viewClass в CakePHP 2.x:

$this->viewClass = 'Media';

См. Виды мультимедиа & mdash; Документация CakePHP Cookbook v2.x

UPD : медиа-представления устарели с CakePHP 2.3, и следует использовать CakeResponse::file():

$this->response->file($file['path'], array('download' => true, 'name' => 'foo'));
return $this->response;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...