
MinIO 是一个高性能的对象存储系统,兼容 Amazon S3 API。通过 MinIO Python SDK,开发者可以轻松地在 Python 应用中集成对象存储功能。本文将介绍 MinIO Python SDK 的使用方法、典型应用场景和代码示例。
首先需要安装 MinIO Python SDK,要求 Python 版本在 3.7 及以上:
pip install minioMinIO 适用于大规模数据备份,支持版本控制和生命周期管理。
网站图片、文档等静态资源可以存储在 MinIO 中,通过 CDN 加速访问。
与 Spark、Hadoop 等大数据工具集成,作为数据湖的存储后端。
在微服务架构中作为共享存储层,实现服务间的数据交换。
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
)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}")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)
)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')}")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}")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")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 信息和最佳实践。
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!