【发布时间】:2021-01-29 08:04:01
【问题描述】:
我有一个 base64 图像,我试图将它保存在 Postgres 数据库中(使用 Hasura)。该字段的类型为bytea 我不知道如何将这些数据保存到该字段中。
我尝试将data:image/png;base64,sisodjodo... 传递给该字段,它会像这样保存它:\x6956424f5277304b47676f414141414...
当我找回它时,它似乎并没有以与保存时相同的方式返回。
// Query the database and save resulting object
const user = {
avatar: '\x6956424f5277304b47676f414141414...'
}
user.avatar = btoa(user.avatar);
console.log(user.avatar);
// Prints: XHg2OTU2NDI0ZjUyNzczMDRiNDc2NzZmNDE0MTQxNDE0Z...
【问题讨论】:
-
无论
btoa()是什么,它都不会将您的'\x6956424f5277304b47676f41414141'视为二进制文件。而是将其视为\x6956424f5277304b47676f41414141的字符串表示形式。我不使用 javascript,因为它是魔鬼的母语,但我能够使用select encode('\\x6956424f5277304b47676f41414141', 'base64');以一种不黑暗的语言复制您的输出。 -
对 base64 编码图像使用
text,而不是bytea。 -
@MikeOrganek
btoa()从二进制字符串(即字符串中的每个字符都被视为二进制数据字节的字符串对象)创建一个 Base64 编码的 ASCII 字符串。 -
@LaurenzAlbe 我不确定我可以我不是数据库管理员,所以我没有能力更改它。
-
您看到的表示是存储在列中的二进制数据的十六进制字符串表示。无论您使用什么从数据库中检索它,都将其视为字符串而不是字节数组。能否包含用于查询 PostgreSQL 的代码?
标签: javascript postgresql base64 hasura bytea