从数据库显示图像

时间:2015-05-31 12:43:30

标签: php image cakephp cakephp-3.0

表用户

image(blob type)  
------------------------------
0xFFD8FFE0     

myController的

function displayImage($id)
{

        $this->autoRender = false;


        $peoples=TableRegistry::get('peoples');      
        $peoples=$peoples->getRecord([ 'image'])->first();   

        header('Content-Type: image/jpeg');

         echo $peoples['image']; 
}

模型

function getRecord($fields)
{
    return $this->find('all')->select($fields);
}

但设置此

<img id="imgPreview" src="displayImage/30">
当我向我展示myController/displayImage/30这个节目Resource id #170时,

图片没有显示任何内容!

为什么?

如何显示图像?

3 个答案:

答案 0 :(得分:3)

您需要阅读返回的资源以获取实际内容(图片数据)

public function displayImage($id)
{ 
    // ... 
    echo stream_get_contents($peoples['image']);
}

这是您方法的修改工作示例。我假设你有一个名为Peoples的模型,其属性为image(BLOB),而$id指的是基础表中的某一行

public function displayImage($id) {
    $table = TableRegistry::get('Peoples');
    $entity = $table->get($id);

    $this->response->type('jpg');
    $this->response->body(stream_get_contents($entity->image));

    return $this->response;
}

答案 1 :(得分:0)

您是否尝试从用户ID中提取图片?

如果是这种情况

$peoples = TableRegistry::get('Peoples');
$peoples->find('all');
$peoples->matching('Users', function($q) use($id) {
   return $q->where(['Users.id' => $id]);
});

$result = $peoples->first();
$result->users[0]->image;

答案 2 :(得分:0)

如果您要解决的问题是如何使用正确的HTML代码上传图片。为此,您只需要在数据库表列varchar type中指定该上载字段,然后在视图中从中上载图像的位置中指定文件类型即可。像这样:

   <?php
        echo $this->Form->input('your_column_name', [ 'type' => 'file']); 
    ?>

但是,如果您的问题是有关无法检索或发送到index.ctp或前端视图的上载图像,那么您的解决方案就在这里: How to retrieve in cakephp3.7 the name as string of an image uploaded trough a form with blob column into a mysql database?