无法使用cakephp从数据库中显示图像

时间:2016-01-20 19:55:36

标签: php mysql cakephp cakephp-3.0

我正在努力使用cakephp来实现具有图像的CRUD。我设法上传图像,保存(在maria / mysql数据库中),现在我可以在phpmyadmin中看到上传的图像。

现在我想在浏览器中显示一些图像。在我的MapasController中,我有以下方法:

public function mostrarImagem($id){
      $file = $this->Mapas->get($id);
      $this->response->body($file->arquivo->uri);
      $this->response->type('image/png');
      //$this->response->download('filename_for_download.png');
      return $this->response;
  }

但是在浏览器中调用此内容会向我显示消息“图像'http://localhost:8765/Mapas/mostrarImagem/5'无法显示,因为它包含错误”。如果我取消注释$ this->响应 - >下载行,我会下载无效文件。 转储$ file变量我得到以下内容:

Mapa {#147 ▼
  +"id": 5
  +"titulo": "blablabla"
  +"arquivo": stream resource @8 ▶}
  +"created": Time {#145 ▶}
  +"modified": Time {#146 ▶}
  +"sistema_id": 5
  +"unidade_id": null
  +"[new]": false
  +"[accessible]": array:1 [▶]
  +"[dirty]": []
  +"[original]": []
  +"[virtual]": []
  +"[errors]": []
  +"[repository]": "Mapas"
}

$ file-> arquivo的内容是:

+"arquivo": stream resource @6 ▼
    wrapper_type: "RFC2397"
    stream_type: "RFC2397"
    mode: "rb"
    unread_bytes: 0
    seekable: true
    uri:     "data:text/plain;base64,iVBORw0KGgoAAAANSUhEUgAAA08AAAGnCAYAAABvtmzcAAAABmJLR0Q(....)
mediatype: "text/plain"
base64: true
options: []

我做错了什么?

1 个答案:

答案 0 :(得分:2)

数据URI不是有效的PNG图像源,无论如何你都不会以这种方式获取数据URI,因为流上没有这样的属性,你在转储中看到的是只调试信息元数据,以便预期的行为。

您想要获取原始数据。

$this->response->body(stream_get_contents($file->arquivo, -1, 0));

......例如。

另见