Zend framework2 Zend Framework-使用控制器返回图像/文件
我是Zend Framework 2的新手,只懂一点基础知识。我发现很难找到很多例子 问题:获取数据库中的BLOB字段并通过控制器显示它。例如:www.mysite.com/images/2将从数据库中检索一个BLOB并将其作为图像显示给用户,因此像Zend framework2 Zend Framework-使用控制器返回图像/文件,zend-framework2,Zend Framework2,我是Zend Framework 2的新手,只懂一点基础知识。我发现很难找到很多例子 问题:获取数据库中的BLOB字段并通过控制器显示它。例如:www.mysite.com/images/2将从数据库中检索一个BLOB并将其作为图像显示给用户,因此像这样的html标记将显示一个图像 我通常在ASP.NETMVC中完成,但不知道如何在这里完成。如果有人能告诉我如何实现这一目标,我将非常高兴 假设我已经从数据库中获取了图像 我设法找到了如何返回JSON,并相信像这样简单的事情会奏效。但是找不到解决办
这样的html标记将显示一个图像
我通常在ASP.NETMVC中完成,但不知道如何在这里完成。如果有人能告诉我如何实现这一目标,我将非常高兴
假设我已经从数据库中获取了图像
我设法找到了如何返回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
}
}
如果有人能帮忙,我将不胜感激
提前感谢。从Zend Framework 2.0到2.1
如果要返回图像,只需返回包含内容的响应对象:这将告诉Zend\Mvc\Application
完全跳过Zend\Mvc\MvcEvent::EVENT\u RENDER
事件并转到Zend\Mvc\Application::EVENT\u 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;
}
这将导致应用程序运行到
Zend\Mvc\Event::Event_FINISH
,这反过来能够将响应发送到输出。除了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;
这真是太好了,我对
mb_strlen
有一些问题,我删除了它:D.这是一个非常消耗CPU的操作,你知道什么解决方案吗?对我来说mb_strlen
不起作用,需要strlen
。如果您得到的不是完整图像,或是错误的响应,您可以试试这个。如紫嫣所建议的,完全移除所有部分也可能起作用。