2013-02-11 1 views
2

Я новичок в Zend Framework 2 и знаю только некоторые основы. Мне также трудно найти множество примеров.Zend Framework - Возвращаемое изображение/файл с использованием контроллера

Quesiton: Получить поле BLOB в базе данных и отобразить его через контроллер. Например: www.mysite.com/images/2 будет извлекать BLOB из базы данных и отображать его пользователю как изображение, поэтому в теге html, таком как <img src="http://www.mysite.com/images/2"/>, будет отображаться изображение.

Обычно я делаю это в ASP.NET MVC, но понятия не имею, как это сделать здесь. Я был бы рад, если бы кто-нибудь мог просветить меня о том, как его достичь.

Предположим, что я выбрал изображение из базы данных.

Мне удалось найти, как вернуть JSON и поверить, что какая-то простая вещь будет работать. Но не удалось найти решение. Мне также нужно будет отправить такие файлы.

public function displayAction() 
{ 
    $id = 10; 
    $albumImage = $this->getAlbumImageTable()->getAlbumImage($id); 

    if ($albumImages){ 
     //Show the image $albumImage 
     //return JsonModel(array(...)) for json but for image ??? 
    } else{ 
     //Show some other image 
    } 
} 

Я был бы обязан, если бы кто-то мог помочь.

Заранее спасибо.

ответ

11

С Zend Framework 2,0 до 2,1

Если вы хотите, чтобы вернуть изображение, просто возвращают объект ответа заполненный с содержанием: что будет говорить Zend\Mvc\Application к полностью пропустить Zend\Mvc\MvcEvent::EVENT_RENDER события и перейти к Zend\Mvc\Application::EVENT_FINISH

public function displayAction() 
{ 
    // get image content 
    $response = $this->getResponse(); 

    $response->setContent($imageContent); 
    $response 
     ->getHeaders() 
     ->addHeaderLine('Content-Transfer-Encoding', 'binary') 
     ->addHeaderLine('Content-Type', 'image/png') 
     ->addHeaderLine('Content-Length', mb_strlen($imageContent)); 

    return $response; 
} 

Это вызовет приложение к short-circuit к Zend\Mvc\Event::EVENT_FINISH, который в свою очередь способен посылать ответ на выход.

+0

Это очень аккуратно, у меня были некоторые проблемы с 'mb_strlen ', Я удалил его: D. –

+0

Это очень эффективное использование процессора, знаете ли вы какие-либо решения? –

0

В дополнение к коду Ocramius', если вы загружаете изображения в папку внутри приложения, вы можете извлечь содержимое, используя:

$imageContent = file_get_contents('data/image/photos/default.png'); 
$response->setContent($imageContent); 
$response 
    ->getHeaders() 
    ->addHeaderLine('Content-Transfer-Encoding', 'binary') 
    ->addHeaderLine('Content-Type', 'image/png') 
    ->addHeaderLine('Content-Length', mb_strlen($imageContent)); 

return $response; 

 Смежные вопросы

  • Нет связанных вопросов^_^