我们在使用yii2
从postgres数据库检索上传的图片时遇到问题我们将图像存储到db:
$data = pg_escape_bytea(file_get_contents($model->CheckIfAvatarExists(Yii::$app->user->identity->username)));
$profile->passphoto = new Expression("'{$data}'");
$profile->save();
完美存储图片
但是当我们尝试显示图片时,它无法正常工作:
header('Content-type: image/png');
echo pg_unescape_bytea( $profile->passphoto);
我认为最大的问题是逃脱后的数据不会回到原来的风景中
任何解决方案?
答案 0 :(得分:1)
在pg_unescape_bytea在线文档中查看此用户提供的评论:
PostgreSQL 9.0引入了“hex”作为编码的新默认格式 二进制数据。因为“pg_unescape_bytea”仅适用于旧版本 “转义”格式,你需要做pg_query('SET bytea_output = “逃逸”;');在执行您的选择查询之前。
事实上,只有当客户端库早于9.0 时才会出现这种情况(libq.so.5.2我认为,现在是EOL'ed)。
如果是这种情况,那就解释了错误的问题。
要强制bytea_output
正确解码escape
,您可以:
SET bytea_output=escape;
作为会话中的SQL命令ALTER DATABASE SET bytea_output=escape;
postgresql.conf
整个实例。理想的解决方案是将libpq
客户端库升级到更新的版本,在这种情况下,这些都不是必需的,只是有效。