2

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

问题:获取数据库中的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
    }
}

如果有人可以提供帮助,我将不胜感激。

提前致谢。

4

2 回答 2

12

从 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;
}

这将导致应用程序与短路Zend\Mvc\Event::EVENT_FINISH进而能够将响应发送到输出。

于 2013-02-11T11:18:23.527 回答
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;
于 2013-12-31T12:45:48.903 回答