使用python将图像上传minio服务器

MinIO 是一个高性能的分布式对象存储服务器

MinIO基于Apache License v2.0开源协议的对象存储服务,非常适合于存储大容量非结构化的数据,例如图片、视频、备份数据和容器/虚拟机镜像等

(尤其是在人工智能的应用中,经常需要把模型结果和识别图像保存至数据库,该方法相比较nginx映射静态文件路径,更简洁方便)

image

 

安装依赖

pip install minio

 

使用python将图像上传minio服务器

from minio import Minio
from minio.error import S3Error
import cv2


def upload_image_minio(image, image_name):
    """
    读取本地图像并上传到MinIO

    参数:
    - image: OpenCV图像对象
    - image_name: 存储在MinIO中的对象名称

    返回:
    - 图像在MinIO中的访问URL
    """
    try:
        # 判断图像是否存在
        if image is None:
            raise ValueError(f"无法读取图像")

        # 将图像编码为JPEG格式
        is_success, buffer = cv2.imencode(".jpg", image)
        if not is_success:
            raise RuntimeError("无法将图像编码为JPEG格式")

        # 创建字节流
        io_buf = io.BytesIO(buffer)

        # 检查存储桶是否存在,不存在则创建
        found = minio_client.bucket_exists(BUCKET_NAME)
        if not found:
            minio_client.make_bucket(BUCKET_NAME)
            print(f"创建存储桶: {BUCKET_NAME}")
        else:
            print(f"存储桶已存在: {BUCKET_NAME}")

        # 上传图像到MinIO
        minio_client.put_object(
            BUCKET_NAME,
            image_name,
            data=io_buf,
            length=io_buf.getbuffer().nbytes,
            content_type="image/jpeg"
        )

        # 生成图像访问URL
        image_url = f"http://{MINIO_ENDPOINT}/{BUCKET_NAME}/{image_name}"
        print(f"图像已成功上传至: {image_url}")

        return image_url

    except S3Error as e:
        print(f"MinIO错误: {e}")
        return None
    except Exception as e:
        print(f"上传图像发生错误: {e}")
        return None


if __name__ == '__main__':
    # minio配置参数
    MINIO_ENDPOINT = "192.1.35.10:9000"  # MinIO服务端点
    ACCESS_KEY = "xxxxxxx"  # MinIO访问密钥
    SECRET_KEY = "xxxxxxx"  # MinIO密钥
    BUCKET_NAME = "pic-fgd"  # 存储桶名称
    USE_SECURE = False  # 已修改为False,使用HTTP协议而非HTTPS
    # 初始化MinIO客户端
    minio_client = Minio(MINIO_ENDPOINT, access_key=ACCESS_KEY, secret_key=SECRET_KEY, secure=USE_SECURE)

    # 读取本地图像 
    image = cv2.imread("C:/Code/yolov5-3.1/fg_dataset/废钢分类/image/dcd1-20250924035523-dcd.jpg")
    
    # 上传图像
    image_detect_url = upload_image_minio(image, "test.jpg")

 

需要注意的地方:

(1)MinIO访问密钥 和 MinIO密钥,需要从Access Keys查找

image

image

 

 

(2)一开始存储桶默认为private,如果需要通过返回URL链接看到图像,需要修改为public

image

 

posted @ 2025-10-14 10:20  马铃薯1  阅读(9)  评论(0)    收藏  举报