首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 操作 MinIO 对象存储的方法,实用

Python 操作 MinIO 对象存储的方法,实用

作者头像
用户11081884
发布2026-07-20 19:24:29
发布2026-07-20 19:24:29
350
举报

MinIO 是一个高性能的对象存储系统,兼容 Amazon S3 API。通过 MinIO Python SDK,开发者可以轻松地在 Python 应用中集成对象存储功能。本文将介绍 MinIO Python SDK 的使用方法、典型应用场景和代码示例。

安装方法

首先需要安装 MinIO Python SDK,要求 Python 版本在 3.7 及以上:

代码语言:javascript
复制
pip install minio

核心功能与使用场景

1. 数据备份与归档

MinIO 适用于大规模数据备份,支持版本控制和生命周期管理。

2. 静态资源存储

网站图片、文档等静态资源可以存储在 MinIO 中,通过 CDN 加速访问。

3. 大数据处理

Spark、Hadoop 等大数据工具集成,作为数据湖的存储后端。

4. 微服务架构

在微服务架构中作为共享存储层,实现服务间的数据交换。

代码示例

初始化客户端

代码语言:javascript
复制
from minio import Minio
from minio.error import S3Error

# 初始化 MinIO 客户端
minio_client = Minio(
    "play.min.io:443",  # MinIO 服务器地址
    access_key="your-access-key",  # 访问密钥
    secret_key="your-secret-key",  # 秘密密钥
    secure=True  # 使用 HTTPS
)

存储桶管理

代码语言:javascript
复制
def manage_buckets():
    # 创建存储桶
    try:
        minio_client.make_bucket("my-documents")
        print("存储桶创建成功")
    except S3Error as err:
        print(f"创建存储桶失败: {err}")

    # 列出所有存储桶
    buckets = minio_client.list_buckets()
    for bucket in buckets:
        print(f"存储桶: {bucket.name}, 创建时间: {bucket.creation_date}")

文件上传操作

代码语言:javascript
复制
def upload_files():
    # 上传本地文件
    minio_client.fput_object(
        "my-documents",  # 存储桶名称
        "reports/annual-report.pdf",  # 对象名称(包含路径)
        "/local/path/annual-report.pdf"  # 本地文件路径
    )
    
    # 上传字节数据
    data = b"Hello, MinIO! This is a text file content."
    minio_client.put_object(
        "my-documents",
        "test/hello.txt",
        data,
        len(data)
    )

文件下载操作

代码语言:javascript
复制
def download_files():
    # 下载文件到本地
    minio_client.fget_object(
        "my-documents",
        "reports/annual-report.pdf",
        "/local/download/annual-report.pdf"
    )
    
    # 获取文件数据流
    response = minio_client.get_object("my-documents", "test/hello.txt")
    content = response.read()
    print(f"文件内容: {content.decode('utf-8')}")

文件列表查询

代码语言:javascript
复制
def list_objects():
    # 列出存储桶中的所有对象
    objects = minio_client.list_objects("my-documents")
    print("存储桶中的文件列表:")
    for obj in objects:
        print(f"- {obj.object_name} (大小: {obj.size} 字节)")
    
    # 带前缀过滤的列表
    images = minio_client.list_objects("my-documents", prefix="images/")
    print("\n图片文件:")
    for img in images:
        print(f"- {img.object_name}")

文件管理操作

代码语言:javascript
复制
def file_management():
    # 检查文件是否存在
    if minio_client.stat_object("my-documents", "reports/annual-report.pdf"):
        print("文件存在")
    
    # 复制文件
    minio_client.copy_object(
        "my-documents", "reports/annual-report-copy.pdf",
        "my-documents/reports/annual-report.pdf"
    )
    
    # 删除文件
    minio_client.remove_object("my-documents", "reports/annual-report-copy.pdf")

完整示例:图片管理应用

代码语言:javascript
复制
class ImageManager:
    def __init__(self, endpoint, access_key, secret_key):
        self.client = Minio(
            endpoint,
            access_key=access_key,
            secret_key=secret_key,
            secure=True
        )
        self.bucket_name = "images-bucket"
    
    def setup_bucket(self):
        if not self.client.bucket_exists(self.bucket_name):
            self.client.make_bucket(self.bucket_name)
    
    def upload_image(self, image_path, image_name):
        self.client.fput_object(
            self.bucket_name,
            f"originals/{image_name}",
            image_path
        )
        print(f"图片 {image_name} 上传成功")
    
    def generate_thumbnail_url(self, image_name, expiry=3600):
        return self.client.presigned_get_object(
            self.bucket_name,
            f"originals/{image_name}",
            expires=expiry
        )

# 使用示例
manager = ImageManager("play.min.io:443", "your-key", "your-secret")
manager.setup_bucket()
manager.upload_image("/path/to/photo.jpg", "vacation-photo.jpg")
thumbnail_url = manager.generate_thumbnail_url("vacation-photo.jpg")

MinIO Python SDK 提供了简单易用的接口来操作对象存储。开发者可以快速在 Python 应用中集成 MinIO 功能,满足各种存储需求。

1、连接管理: 重用客户端实例,避免频繁创建新连接;

2、错误处理: 使用 try-except 块捕获 S3Error 异常;

3、权限控制: 合理设置存储桶和对象的访问权限;

4、性能优化: 对大文件使用分片上传,对小文件进行批量操作;

在实际使用中,可以参考官方文档获取最新的 API 信息和最佳实践。

  • 官方文档: https://min.io/docs/minio/linux/developers/python/minio-py.html
  • GitHub 仓库: https://github.com/minio/minio-py
  • API 参考: https://min.io/docs/minio/linux/developers/python/API.html

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装方法
  • 核心功能与使用场景
    • 1. 数据备份与归档
    • 2. 静态资源存储
    • 3. 大数据处理
    • 4. 微服务架构
  • 代码示例
    • 初始化客户端
    • 存储桶管理
    • 文件上传操作
    • 文件下载操作
    • 文件列表查询
    • 文件管理操作
    • 完整示例:图片管理应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档