Kohana 3,提供存储在数据库中的图像

时间:2011-03-31 23:10:02

标签: kohana kohana-3

我有这个工作在kohana 2,但在kohana 3它没有。

为了在数据库中提供存储为BLOB的图像,我执行了以下操作:

1-我要求我想要什么图像的控制器。我使用模型连接数据库,然后使用视图提供图像。

$prod = ORM::factory('product',$idx);
$img = new View('image');
$img->pic = $prod->getImage();

2 - 该模型有一个小技巧可以使这个工作:

public function getImage() 
  {
    return imagecreatefromstring($this->image);
  }

image是blob列,我存储了我想要服务的图片。

3-在视图中: 我设置了内容类型标题,然后提供图像

header('content-type: image/png; charset=UTF-8');
imagepng($pic); 

这在Kohana 2中有效,但在KO3中没有,

我正在尝试使用$ response-> send_file(),但我迷路了

1 个答案:

答案 0 :(得分:0)

首先,除非你正在攻击fw,否则你永远不应该使用header()发送标题。 Ko3.1很好地将Request与Response分开,后者是负责响应头/其他所有内容的人(两者都是在RFC 2616之后编写的)。

其次,在这种情况下绝对不需要视图文件,Response :: $ _ body是当前响应对象返回的内容。

Response :: send_file()将响应作为下载返回,我想这不是你想要完成的事情吗?

所以,你需要这样的东西(根据你自己的需要修改):

public function action_image($id)
{
    $image = ORM::factory('product', $id);

    if ( ! $image->loaded()) // ... 404 ?

    $this->response
        ->headers('Content-Type','image/png')
        ->body($image->image)
        ->check_cache(NULL, $this->request); // 304 ?
}