【问题标题】:how insert image data to postgres data base and select the image data from data base如何将图像数据插入 postgres 数据库并从数据库中选择图像数据
【发布时间】:2019-09-12 06:10:43
【问题描述】:

我已经使用 base64-img 模块将 jpg 图像转换为 base64img 格式,base64img 数据以 varchar 数据类型存储到 postgres。

我可以在不转换的情况下存储图像数据吗?

我正在使用以下查询来存储 varchar 数据。

create table:
CREATE TABLE images (
 name varchar,
base64data varchar
);

insert values:
INSERT INTO image(name,base64data) VALUES ('image1','base64imagedata in string type');

【问题讨论】:

标签: sql postgresql


【解决方案1】:

你要么用text:

CREATE TABLE images (
    name varchar,
    base64data text
);

INSERT INTO image(name, base64data) 
VALUES ('image1','base64imagedata in string type')

对于varchar,您需要预先确定大小。至少使用text,它可以省去您提前确定存储base64 图像的最大大小的麻烦。我认为text 的限制仍然是 1GB,即使您也可以称其为限制。

或者你用bytea:

CREATE TABLE images (
    name varchar,
    base64data bytea
);

INSERT INTO image(name, base64data) 
VALUES ('image1', decode('base64imagedata in string type', 'base64'))

最好使用反映实际数据类型的数据类型。对于图像,它不是一个 ASCII / Unicode 字符序列,一个字符串 / varchar / 文本。相反,它是从 0 到 255 的所有可能值的序列,一个字节数组。 bytea 数据类型是图像的正确数据类型。

顺便说一句,最好不要将base64传输到数据库。除了节省带宽外,它还使数据库免于执行解码。相反,在应用程序端将 base64 转换为字节数组。这取决于您的数据访问层或 ORM。

这是 Sequelize(nodejs 应用程序)上的一个:PostgreSQL - How to insert Base64 images strings into a BYTEA column?

Sequelize.BLOB('tiny')

事实上,如果您的图像已经来自字节数组。您甚至不需要将其转换为 base64 并将其解码回 Postgres。您只需将字节数组传递给数据访问层即可。 .NET 中的示例:https://docs.huihoo.com/enterprisedb/8.1/dotnet-usingbytea.html

这样可以在传输图像时节省网络带宽。 base64 数据表示比原始字节数组大,它也为数据库节省了一些工作。将部分工作卸载到应用层

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多