2011-03-31 113 views
0

我有这个工作kohana 2,但在kohana 3它没有。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); 
    } 

形象是我存放我想为图片中的BLOB列。

3-在视图: 予设定的Content-Type头,然后服务于图像

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

这个工作中的Kohana 2,但在KO3没有,

I”想要使用$响应 - >由send_file(),但我迷路

+1

显示控制器代码,请(用'$响应 - >由send_file()'等等) – biakaveron 2011-04-01 05:19:57

回答

0

首先,你永远不应该用header(),除非你是黑客FW发送头。 Ko3.1很好地区分了Request from Response和后者是负责响应标头/其他的一切(它们都是在RFC 2616之后写的)。

其次,有absolutelly在这种情况下没有必要对一个视图文件,响应:: $ _身体就是当前的响应对象的回报。

响应::由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 ? 
} 
+0

BTW。我建议你使用本地数据库函数来保存这些数据,并且在后面的日志中保存etag(稍后作为check-cache的第一个参数传递它) – Kemo 2011-04-01 23:01:06

+0

它变得很棒!谢谢! 我不得不从数据库返回的数据,因为它是imagecreatefromstring打破了图像......真的不知道为什么(我的意思是,它在KO2工作)。我对此很着急,所以,再次感谢你! – fermar 2011-04-02 02:35:23