PostgreSQL - 如何将 Base64 图像字符串插入 BYTEA 列?

Posted

技术标签:

【中文标题】PostgreSQL - 如何将 Base64 图像字符串插入 BYTEA 列?【英文标题】:PostgreSQL - How to insert Base64 images strings into a BYTEA column? 【发布时间】:2019-08-05 19:39:59 【问题描述】:

我有以下 SQL:

CREATE TABLE Documents (
  Id INT NOT NULL,
  UserId INT NOT NULL,
  Label CHARACTER VARYING(220) NOT NULL,
  Image BYTEA NOT NULL,
  PRIMARY Key(Id),
  FOREIGN KEY (UserId) REFERENCES Users(Id)
);

我想知道,我应该如何将Base64图像插入表格中。

Base64 字符串来自使用 Node.js 上的fs 模块获取图像后的缓冲区。

我正在尝试使用 Sequelize 的原始查询插入图像,但我没有找到关于此的适当信息。

【问题讨论】:

你想如何插入Base64图像?通过 SQL 语句?以编程方式? 以编程方式,使用 Sequelize's 原始查询...我使用 Node.js 中的文件系统 (fs) 包从缓冲区中提取了 base64 字符串 您可以将此有用信息添加到您的问题中。 @user871611 我添加了它,当然我确实必须首先添加它,但由于缺乏有关如何插入 bytea 的信息,我认为只是询问SQL查询就够了,感谢您的耐心等待 不应该是decode 函数(参见postgresql.org/docs/9.1/functions-binarystring.html)吗?类似decode(..., 'base64') 【参考方案1】:

回答有关 Postgres 和 Sequelize 的问题:

您需要使用Sequelize.BLOB('tiny') 数据类型来模拟BYTEA Postgres 数据类型。

这里是关于 Sequelize 中数据类型的更多信息(它也包含上述信息):

http://docs.sequelizejs.com/manual/data-types.html

当转换成一个微小的 blob 时,Postgres 将默认为 utf-8,这意味着您可能希望将您的数据转换为 utf-8 编码,存储数据,并将其读取为 utf-8。

编辑:

您将使用 Base64 将图像二进制数据编码为 ASCII 字符串: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

【讨论】:

【参考方案2】:

试试这个:

insert into table_name (image)
values decode('AcAAFBAO5Az....AQAAAFBCO5gT/AEAABT', 'base64')

这里有一些关于decode的信息

https://www.base64decode.net/postgresql-decode

【讨论】:

以上是关于PostgreSQL - 如何将 Base64 图像字符串插入 BYTEA 列?的主要内容,如果未能解决你的问题,请参考以下文章

将base64转换为图像是给出位图数据

base64的图片编码,python如何转存为一张图?

VichUploader和CroppieJS:如何发送base64裁剪图像以在Symfony 4中保留

如何将 blob 图像转换为 base64? base64 变量显示为空

Python 对图像进行base64编码及解码读取为numpyopencvmatplot需要的格式

MySQL - Base64 与 BLOB