You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JHipster-Liquibase:如何上传图片文件Blob至PostgreSQL?

如何将本地图片上传至PostgreSQL的longblob类型列

首先得提一句:PostgreSQL本身并没有longblob这个类型,你这里的表定义应该是兼容其他数据库的写法,实际在PostgreSQL里会被映射成bytea类型(用来存储二进制数据)。如果是超大文件,也可以用PostgreSQL的大对象(Large Object)机制,不过我们先从最常用的场景说起。

下面给你两种靠谱的实现方式,按需选择:

方法一:用PostgreSQL命令行(psql)直接上传

如果你习惯用命令行操作,这种方式适合快速测试:

前置准备

  • 先确认图片文件(比如MyImage.jpeg)的位置:如果用pg_read_file函数,文件得在数据库服务器的本地路径下;如果用\lo_import,可以是你本地机器的文件(只要能通过psql连接到数据库)。
  • 记好图片的MIME类型:jpeg文件对应image/jpeg,png是image/png,这个要填到image_content_type列里,方便后续识别图片格式。

具体操作

方式A:用pg_read_file(服务器本地文件)

这个方法需要超级用户权限,直接读取服务器上的文件插入:

INSERT INTO your_table_name (image, image_content_type)
VALUES (pg_read_file('/绝对路径/MyImage.jpeg'), 'image/jpeg');

方式B:用\lo_import(本地文件)

先通过psql把本地文件导入成PostgreSQL的大对象,会返回一个OID(比如12345):

\lo_import '/你本地的路径/MyImage.jpeg'

然后用这个OID获取二进制数据插入表中:

INSERT INTO your_table_name (image, image_content_type)
VALUES (lo_get(12345), 'image/jpeg');

如果不需要保留这个大对象,插入后可以删掉:

\lo_unlink 12345

方法二:用编程语言上传(以Python为例)

这是实际项目里最常用的方式,通过代码读取本地文件并插入数据库:

第一步:安装依赖

先装PostgreSQL的Python驱动psycopg2:

pip install psycopg2-binary

第二步:编写代码

把下面的占位符替换成你自己的数据库信息和文件路径就行:

import psycopg2
from mimetypes import guess_type

# 数据库连接配置,换成你自己的
db_config = {
    "dbname": "你的数据库名",
    "user": "你的用户名",
    "password": "你的密码",
    "host": "数据库地址"
}

# 本地图片的路径
image_file = "MyImage.jpeg"

# 自动识别图片的MIME类型
mime_type, _ = guess_type(image_file)
# 如果识别不出来,用默认的二进制类型
if not mime_type:
    mime_type = 'application/octet-stream'

# 读取图片的二进制数据
with open(image_file, 'rb') as f:
    image_bytes = f.read()

# 插入数据到数据库
try:
    with psycopg2.connect(**db_config) as conn:
        with conn.cursor() as cursor:
            insert_sql = """
                INSERT INTO your_table_name (image, image_content_type)
                VALUES (%s, %s);
            """
            cursor.execute(insert_sql, (image_bytes, mime_type))
        conn.commit()
    print("图片上传成功啦!")
except Exception as e:
    print(f"上传出错了:{str(e)}")

几个重要提醒

  • 一定要把代码里的your_table_name换成你实际的表名,数据库参数也得对应上。
  • image_content_type别乱填,正确的MIME类型能让后续读取图片时正常解析。
  • 如果你的图片特别大(比如超过1GB),建议用PostgreSQL的大对象(Large Object)来存储,bytea更适合中等大小的二进制数据。

内容的提问来源于stack exchange,提问作者1Z10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:42