我有这个工作在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(),但我迷路了
答案 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 ?
}