微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将Postgres bytea转换为base64字符串

如何解决如何将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且表中有一个byteafield的表,则可以这样插入一个新行,其字节串为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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?