Kohana 3,服务存储在数据库中的图像

Kohana 3,服务存储在数据库中的图像,kohana,kohana-3,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()

我在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,但是我迷路了

首先,你不应该发送带有标题的标题,除非你正在攻击fw。Ko3.1很好地将请求和响应分开,后者负责响应头/其他所有内容,这两个部分基本上都是按照以下步骤编写的

其次,在本例中,绝对不需要视图文件,Response::$\u body是当前Response对象返回的内容

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 ?
}

请用$response->send_file etcbtw显示控制器代码。我建议您为此使用本机数据库函数,并将etag保存在db中,以减少以后的开销,稍后将其作为check cacheit的第一个参数传递,这一切都很好!,非常感谢。我必须按原样从数据库返回数据,imagecreatefromstring破坏了图像。。。我真的不知道为什么我的意思是,它在KO2中起作用。我很忙,所以,再次谢谢你!