如何解决如何将Postgres bytea转换为base64字符串
我有一个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...
解决方法
Postgres bytea
字段必须以两种格式之一输入,最简单的一种是hex。此格式类似于\x[your byte string in hex]
因此,假设您有一个名为things
且表中有一个bytea
列field
的表,则可以这样插入一个新行,其字节串为010101
:>
mutation {
insert_things_one(object: {
field: "\\x010101"
}) {
field
}
}
结果将是:
{
"data": {
"insert_thing_one": {
"field": "\\x010101"
}
}
}
请注意,在GraphQL中必须转义\
。您可以在SQL中验证其是否正确存储:
> select * from things;
field
\x010101
如果您要为每个问题存储一个以base64编码的字节字符串,则需要剥离开头的data:image/png;base64,
,然后以您使用的任何语言将base64字符串编码为十六进制。在JS中:Decode Base64 to Hexadecimal string with javascript
PS。我不建议使用文本字段来存储base64编码的字符串。这将使您花费比必要更多的存储空间。按照上面我的回答,只需重新编码为十六进制即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。