如何将图像数据插入Postgres数据库并从数据库中选择图像数据

时间:2019-04-23 05:18:33

标签: sql postgresql

我已经使用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');

1 个答案:

答案 0 :(得分:0)

您以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 / text的序列。相反,它是一个从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数据表示形式大于原始字节数组,它也为数据库节省了一些工作。将一些工作卸载到应用程序层