我是Zend Framework 2的新手,只知道一些基础知识。我发现很难找到很多例子。
问题:在数据库中获取BLOB字段并通过控制器显示它。例如:www.mysite.com/images/2将从数据库中检索BLOB并将其作为图像显示给用户,因此像<img src="http://www.mysite.com/images/2"/>
这样的html标记将显示图像。
我通常在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
}
}
如果有人可以提供帮助,我将不胜感激。
提前致谢。
答案 0 :(得分:12)
从Zend Framework 2.0到2.1
如果您想要返回图片,只需返回内容中填写的响应对象:这将告诉Zend\Mvc\Application
完全跳过Zend\Mvc\MvcEvent::EVENT_RENDER
事件并转到Zend\Mvc\Application::EVENT_FINISH
< / p>
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
,而{{1}}又可以将响应发送到输出。
答案 1 :(得分: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;