使用python将图像上传minio服务器
MinIO 是一个高性能的分布式对象存储服务器
MinIO基于Apache License v2.0开源协议的对象存储服务,非常适合于存储大容量
非结构化
的数据,例如图片、视频、备份数据和容器/虚拟机镜像等
(尤其是在人工智能的应用中,经常需要把模型结果和识别图像保存至数据库,该方法相比较nginx映射静态文件路径,更简洁方便)
安装依赖
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查找
(2)一开始存储桶默认为private,如果需要通过返回URL链接看到图像,需要修改为public