MinIO 是一个高性能的分布式对象存储服务器
MinIO基于Apache License v2.0开源协议的对象存储服务,非常适合于存储大容量
非结构化
的数据,例如图片、视频、备份数据和容器/虚拟机镜像等
(尤其是在人工智能的应用中,经常需要把模型结果和识别图像保存至数据库,该方法相比较nginx映射静态文件路径,更简洁方便)
安装依赖
pip install minio
使用python将图像上传minio服务器
from minio import Minio from minio.error import S3Error import cv2def 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")# 生成图像访问URLimage_url = f"http://{MINIO_ENDPOINT}/{BUCKET_NAME}/{image_name}"print(f"图像已成功上传至: {image_url}")return image_urlexcept S3Error as e:print(f"MinIO错误: {e}")return Noneexcept Exception as e:print(f"上传图像发生错误: {e}")return Noneif __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