我正在努力使用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: []
我做错了什么?
答案 0 :(得分:2)
数据URI不是有效的PNG图像源,无论如何你都不会以这种方式获取数据URI,因为流上没有这样的属性,你在转储中看到的是只调试信息元数据,以便预期的行为。
您想要获取原始数据。
$this->response->body(stream_get_contents($file->arquivo, -1, 0));
......例如。
另见