minio python sdk

Minio对象属性

Minio是一个对象存储服务器,不是一个数据库。因此,它不是一个关系型数据库或非关系型数据库,而是一个面向对象的存储系统。在Minio中,每个对象都是一个二进制文件,可以包含任何类型的数据。

虽然Minio不是一个数据库,但是它允许您在对象中存储元数据,这些元数据可以用来描述对象的属性。

文件类型

Content-Type(也称为 MIME 类型)是一个 HTTP 标头,用于指示资源的媒体类型。在上传文件到 MinIO 时,Content-Type 告诉服务器和客户端文件的格式,以便它们能正确处理文件。以下是一些常见文件类型对应的 Content-Type

文本文件

文本类型Content-Type图像类型Content-Type
.txttext/plain.jpg.jpegimage/jpeg
.csvtext/csv.pngimage/png
.htmltext/html.gifimage/gif
.csstext/css.bmpimage/bmp
.jstext/javascript.svgimage/svg+xml
.xmltext/xml.webpimage/webp
音频文件Content-Type视频文件Content-Type
.mp3audio/mpeg.mp4video/mp4
.wavaudio/wav.avivideo/x-msvideo
.oggaudio/ogg.movvideo/quicktime
.flacaudio/flac.mkvvideo/x-matroska
压缩文件Content-Type办公文件Content-Type
.zipapplication/zip.pdfapplication/pdf
.rarapplication/vnd.rar.docapplication/msword
.7zapplication/x-7z-compressed.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.tarapplication/x-tar.xlsapplication/vnd.ms-excel
.gzapplication/gzip.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.bz2application/x-bzip2.pptapplication/vnd.ms-powerpoint
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
文件扩展名Content-Type
.jsonapplication/json
.exeapplication/octet-stream

自动推断 Content-Type

import mimetypes

file_name = "example.jpg"
content_type, _ = mimetypes.guess_type(file_name)
print(f"推断的 Content-Type 为: {content_type}")

使用

pip install minio

client

from minio import Minio

# Initialize Minio client
client = Minio('localhost:9000',
               access_key='ACCESS_KEY',
               secret_key='SECRET_KEY',
               secure=False)

bucket

# 创建存储桶
client.make_bucket('mybucket')

# 检查存储桶是否存在
client.bucket_exists(bucker_name)

# 列出所有桶
buckets = client.list_buckets()
for bucket in buckets:
    print(bucket.name, bucket.creation_date)

# 存储桶策略信息
policy = client.get_bucket_policy(bucket_name)

# 存储桶通知配置
notification = client.get_bucket_notification(bucket_name)

# 删除存储桶
client.remove_bucket("my-bucket")

object

# 上传文件1
client.fput_object(
    bucket_name = 'mybucket', 			# 存储桶
    object_name = 'myfile', 			# 文件名
    file_path = '/path/to/local/file',	# 文件路径
    content_type = '',
    metadata = {}						# 自定义字典数据
)

# 上传文件2
file_data = open(file_path, 'rb')
with open(file_path, 'rb') as file_data:
    file_stat = os.stat(file_path)
    client.put_object(
        bucket_name, 
        object_name, 
        file_data, 
        file_stat.st_size,
)

# 上传文件3
data_stream = io.BytesIO(data) # data 为2进制数据
    data_length = len(data)
    # 上传数据
    client.put_object(
        bucket_name, object_name, data_stream, data_length
)

# 下载文件1
client.fget_object(
    "my-bucket", 			# 
    "my-object", 			# 
    "downloaded-file",
)

# 下载文件2
response = client.get_object(bucket_name, object_name)
with open(file_path, 'wb') as file_data:
    for data in response.stream(32 * 1024):
        file_data.write(data)

# 下载文件3
response = client.get_object(bucket_name, object_name)
# 创建 BytesIO 对象用于存储下载的数据
data_stream = io.BytesIO()
# 逐块读取数据并写入 BytesIO 对象
for data in response.stream(32 * 1024):
    data_stream.write(data)
# 将文件指针移动到开头
data_stream.seek(0)
# 读取数据
downloaded_data = data_stream.read()

# 删除对象
client.remove_object("my-bucket", "my-object.txt")

# 对象状态
print(f"存储桶名称: 	{obj_stat.bucket_name}")
print(f"对象名称: 	{obj_stat.object_name}")
print(f"最后修改时间: {obj_stat.last_modified}")
print(f"ETag: 		{obj_stat.etag}")
print(f"对象大小: 	{obj_stat.size} 字节")
print(f"内容类型: 	{obj_stat.content_type}")
print(f"自定义元数据: {obj_stat.metadata}")

# 列出存储桶中的所有对象
objects = client.list_objects(bucket_name, recursive=True)
print(f"存储桶 {bucket_name} 中的所有对象名称:")
for obj in objects:
    print(obj.object_name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值