相关文章推荐
从容的生姜  ·  使用 Java 列出 Blob - ...·  1 月前    · 
坐怀不乱的板栗  ·  java使用ffmpeg连接rtsp一直报下 ...·  11 月前    · 
卖萌的芹菜  ·  mysqld: can't create ...·  1 年前    · 
细心的荔枝  ·  Kafka中的这只“千里眼”,你需要知道!! ...·  2 年前    · 
淡定的地瓜  ·  阿里云智能语音交互--实时语音识别服务Jav ...·  2 年前    · 
幸福的金针菇  ·  执行 startup.bat 和 ...·  2 年前    · 
Code  ›  【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)开发者社区
config aws 版本控制 prefix
https://cloud.tencent.com/developer/article/1940199
另类的勺子
2 年前
作者头像
愚公搬代码
0 篇文章

【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > CTF-攻防世界 > 【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)

【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)

作者头像
愚公搬代码
发布 于 2022-01-29 14:07:39
1.3K 0
发布 于 2022-01-29 14:07:39
举报

文章目录

  • 一、python对接MinIO
    • 1.首先执行命令安装包
    • 2.创建客户端
    • 3.桶操作
      • 3.1 创建桶
      • 3.2 查询桶
        • 3.2.1 查询桶和判断桶是否存在
        • 3.2.2 列出桶的对象信息
      • 3.3 删除桶
      • 3.4 桶的策略配置
        • 3.4.1 策略查询
        • 3.4.2 策略设置
        • 3.4.3 策略删除
      • 3.5 桶的通知配置
        • 3.5.1 桶的通知配置
        • 3.5.2 桶的通知设置
        • 3.5.3 桶的通知删除
      • 3.6 桶的前缀和后缀事件
      • 3.7 桶的加密配置
        • 3.7.1 加密查询
        • 3.7.2 加密设置
        • 3.7.3 加密删除
      • 3.8 桶的版本控制配置
        • 3.8.1 版本控制查询
        • 3.8.2 版本控制设置
      • 3.9 桶的复制配置
        • 3.9.1 复制查询
        • 3.9.2 复制设置
        • 3.9.3 复制删除
      • 3.10 桶的生命周期
        • 3.10.1 生命周期查询
        • 3.10.2 生命周期设置
        • 3.10.3 生命周期删除
      • 3.11 桶的标签
        • 3.11.1 标签查询
        • 3.11.2 标签设置
        • 3.11.3 标签删除
      • 3.12 桶的对象锁
        • 3.12.1 对象锁查询
        • 3.12.2 对象锁设置
        • 3.12.3 对象锁删除
  • 总结

一、python对接MinIO

1.首先执行命令安装包

pip install minio

2.创建客户端

from minio import Minio
# 创建具有匿名访问权限的客户端。
client = Minio("play.min.io")
# 创建具有访问权限和密钥的客户端。
client = Minio("s3.amazonaws.com", "ACCESS-KEY", "SECRET-KEY")
# 创建具有特定区域的访问密钥和密钥的客户端。
client = Minio(
    "play.minio.io:9000",
    access_key="Q3AM3UQ867SPQQA43P2F",
    secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
    region="my-region",
# 使用代理服务器创建带有自定义HTTP客户端的客户端。
import urllib3
client = Minio(
    "SERVER:PORT",
    access_key="ACCESS_KEY",
    secret_key="SECRET_KEY",
    secure=True,
    http_client=urllib3.ProxyManager(
        "https://PROXYSERVER:PROXYPORT/",
        timeout=urllib3.Timeout.DEFAULT_TIMEOUT,
        cert_reqs="CERT_REQUIRED",
        retries=urllib3.Retry(
            total=5,
            backoff_factor=0.2,
            status_forcelist=[500, 502, 503, 504],
)

3.桶操作

3.1 创建桶

# 创建bucket。
client.make_bucket("my-bucket")
# 在特定区域创建bucket。
client.make_bucket("my-bucket", "us-west-1")
# 在特定区域创建具有对象锁定功能的桶。
client.make_bucket("my-bucket", "eu-west-2", object_lock=True)

3.2 查询桶

3.2.1 查询桶和判断桶是否存在

# 查询所有桶
buckets = client.list_buckets()
for bucket in buckets:
    print(bucket.name, bucket.creation_date)
# 判断桶是否存在
if client.bucket_exists("my-bucket"):
    print("my-bucket exists")
else:
    print("my-bucket does not exist")

3.2.2 列出桶的对象信息

# 列出对象信息。
objects = client.list_objects("my-bucket")
for obj in objects:
    print(obj)
# 列出名称以“my/prefix/”开头的对象信息。
objects = client.list_objects("my-bucket", prefix="my/prefix/")
for obj in objects:
    print(obj)
# 递归地列出对象信息。
objects = client.list_objects("my-bucket", recursive=True)
for obj in objects:
    print(obj)
# 递归列出名称以开头的对象信息
# "my/prefix/".
objects = client.list_objects(
    "my-bucket", prefix="my/prefix/", recursive=True,
for obj in objects:
    print(obj)
# 在对象名称后递归列出对象信息
objects = client.list_objects(
    "my-bucket", recursive=True, start_after="my/prefix/world/1",
for obj in objects:
    print(obj)

3.3 删除桶

client.remove_bucket("my-bucket")

3.4 桶的策略配置

3.4.1 策略查询

policy = client.get_bucket_policy("my-bucket")

3.4.2 策略设置

# 匿名只读存储桶策略。
policy = {
    "Version": "2012-10-17",
    "Statement": [
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": ["s3:GetBucketLocation", "s3:ListBucket"],
            "Resource": "arn:aws:s3:::my-bucket",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
client.set_bucket_policy("my-bucket", json.dumps(policy))
# 匿名读写存储桶策略。
policy = {
    "Version": "2012-10-17",
    "Statement": [
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
            "Resource": "arn:aws:s3:::my-bucket",
            "Effect": "Allow",
            "Principal": {"AWS": "*"},
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
            "Resource": "arn:aws:s3:::my-bucket/images/*",
client.set_bucket_policy("my-bucket", json.dumps(policy))

3.4.3 策略删除

client.delete_bucket_policy("my-bucket")

3.5 桶的通知配置

3.5.1 桶的通知配置

config = client.get_bucket_notification("my-bucket")

3.5.2 桶的通知设置

config = NotificationConfig(
    queue_config_list=[
        QueueConfig(
            "QUEUE-ARN-OF-THIS-BUCKET",
            ["s3:ObjectCreated:*"],
            config_id="1",
            prefix_filter_rule=PrefixFilterRule("abc"),
client.set_bucket_notification("my-bucket", config)

3.5.3 桶的通知删除

client.delete_bucket_notification("my-bucket")

3.6 桶的前缀和后缀事件

with client.listen_bucket_notification(
    "my-bucket",
    prefix="my-prefix/",
    events=["s3:ObjectCreated:*", "s3:ObjectRemoved:*"],
) as events:
    for event in events:
        print(event)

3.7 桶的加密配置

3.7.1 加密查询

config = client.get_bucket_encryption("my-bucket")

3.7.2 加密设置

client.set_bucket_encryption(
    "my-bucket", SSEConfig(Rule.new_sse_s3_rule()),
)

3.7.3 加密删除

client.delete_bucket_encryption("my-bucket")

3.8 桶的版本控制配置

3.8.1 版本控制查询

config = client.get_bucket_versioning("my-bucket")
print(config.status)

3.8.2 版本控制设置

client.set_bucket_versioning("my-bucket", VersioningConfig(ENABLED))

3.9 桶的复制配置

3.9.1 复制查询

config = client.get_bucket_replication("my-bucket")

3.9.2 复制设置

config = ReplicationConfig(
    "REPLACE-WITH-ACTUAL-ROLE",
        Rule(
            Destination(
                "REPLACE-WITH-ACTUAL-DESTINATION-BUCKET-ARN",
            ENABLED,
            delete_marker_replication=DeleteMarkerReplication(
                DISABLED,
            rule_filter=Filter(
                AndOperator(
                    "TaxDocs",
                    {"key1": "value1", "key2": "value2"},
            rule_id="rule1",
            priority=1,
client.set_bucket_replication("my-bucket", config)

3.9.3 复制删除

client.delete_bucket_replication("my-bucket")

3.10 桶的生命周期

3.10.1 生命周期查询

config = client.get_bucket_lifecycle("my-bucket")

3.10.2 生命周期设置

config = LifecycleConfig(
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="documents/"),
            rule_id="rule1",
            transition=Transition(days=30, storage_class="GLACIER"),
        Rule(
            ENABLED,
            rule_filter=Filter(prefix="logs/"),
            rule_id="rule2",
            expiration=Expiration(days=365),
 
推荐文章
从容的生姜  ·  使用 Java 列出 Blob - Azure Storage | Microsoft Learn
1 月前
坐怀不乱的板栗  ·  java使用ffmpeg连接rtsp一直报下标越界怎么办 ffmpeg rtsp server_mob64ca13f6035c的技术博客_51CTO博客
11 月前
卖萌的芹菜  ·  mysqld: can't create directory 'c:\program files\mysql\mysql server 8.0\data\' (os errno 13 - permis
1 年前
细心的荔枝  ·  Kafka中的这只“千里眼”,你需要知道!!!-51CTO.COM
2 年前
淡定的地瓜  ·  阿里云智能语音交互--实时语音识别服务Java SDK Quick Start-阿里云开发者社区
2 年前
幸福的金针菇  ·  执行 startup.bat 和 startup.sh 不能正常启动,怎么办? -问答-阿里云开发者社区-阿里云
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号