Zend framework2 Zend Framework-使用控制器返回图像/文件

Zend framework2 Zend Framework-使用控制器返回图像/文件,zend-framework2,Zend Framework2,我是Zend Framework 2的新手,只懂一点基础知识。我发现很难找到很多例子 问题:获取数据库中的BLOB字段并通过控制器显示它。例如:www.mysite.com/images/2将从数据库中检索一个BLOB并将其作为图像显示给用户,因此像这样的html标记将显示一个图像 我通常在ASP.NETMVC中完成,但不知道如何在这里完成。如果有人能告诉我如何实现这一目标,我将非常高兴 假设我已经从数据库中获取了图像 我设法找到了如何返回JSON,并相信像这样简单的事情会奏效。但是找不到解决办

我是Zend Framework 2的新手,只懂一点基础知识。我发现很难找到很多例子

问题:获取数据库中的BLOB字段并通过控制器显示它。例如:www.mysite.com/images/2将从数据库中检索一个BLOB并将其作为图像显示给用户,因此像
这样的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
。如果您得到的不是完整图像,或是错误的响应,您可以试试这个。如紫嫣所建议的,完全移除所有部分也可能起作用。