文章目录

  • 什么是对象?
  • 一、对象操作
    • 1.对象数据的获取
      • 1.1 从对象的偏移量到长度获取数据
      • 1.2 通过 SQL 表达式选择对象的内容
      • 1.3 获取对象的对象信息和元数据
    • 2.对象创建
      • 2.1 将对象的数据下载到文件中
      • 2.2 复制对象数据
      • 2.3 副本组合创建对象
      • 2.4 本地数据流上传到对象
      • 2.5 将文件中的数据上传到存储桶中的对象
    • 3.对象删除
      • 3.1 移除一个对象
      • 3.2 移除多个对象
  • 二、对象标签配置
    • 1.删除对象的标签配置
    • 2.获取对象的标签配置
    • 3.设置对象的标签配置
  • 三、对象合法保留
    • 1.禁用对象的合法保留
    • 2.启用对象的合法保留
    • 3.判断对象的合法保留是否存在
    • 3.获取对象的合法保留信息
    • 4.设置对象的合法保留信息
  • 四、对象预签名 URL
    • 1.获取对象的预签名 URL 以下载其具有到期时间和自定义请求参数的数据
    • 2.获取对象的预签名 URL 以上传具有到期时间和自定义请求参数的数据
  • 五、对象 PostPolicy
    • 1.获取对象 PostPolicy 的表单数据以使用 POST 方法上传其数据
  • 六、HTTP 方法
    • 1.获取 HTTP 方法、到期时间和自定义请求参数的对象的预签名 URL

什么是对象?

对象是MinIO存储数据的基本单元,也被称为MinIO的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。

对象存储在存储空间(Bucket)中的。

一、对象操作

1.对象数据的获取

1.1 从对象的偏移量到长度获取数据

# 获取对象的数据。
try:response = client.get_object("my-bucket", "my-object")# 从响应中读取数据。
finally:response.close()response.release_conn()# 获取版本ID为的对象的数据。
try:response = client.get_object("my-bucket", "my-object",version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",)# 从响应中读取数据。
finally:response.close()response.release_conn()# 从偏移量和长度中获取对象的数据。
try:response = client.get_object("my-bucket", "my-object", offset=512, length=1024,)# 从响应中读取数据。
finally:response.close()response.release_conn()# 获取SSE-C加密对象的数据。
try:response = client.get_object("my-bucket", "my-object",ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),)# 从响应中读取数据。
finally:response.close()response.release_conn()

1.2 通过 SQL 表达式选择对象的内容

with client.select_object_content("my-bucket","my-object.csv",SelectRequest("select * from S3Object",CSVInputSerialization(),CSVOutputSerialization(),request_progress=True,),
) as result:for data in result.stream():print(data.decode())print(result.stats())

1.3 获取对象的对象信息和元数据

# 获取对象信息
result = client.stat_object("my-bucket", "my-object")
print("last-modified: {0}, size: {1}".format(result.last_modified, result.size,),
)# 获取version-ID的对象信息
result = client.stat_object("my-bucket", "my-object",version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)
print("last-modified: {0}, size: {1}".format(result.last_modified, result.size,),
)# 获取SSE-C加密的对象信息
result = client.stat_object("my-bucket", "my-object",ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print("last-modified: {0}, size: {1}".format(result.last_modified, result.size,),
)

2.对象创建

2.1 将对象的数据下载到文件中

# 下载对象的数据
client.fget_object("my-bucket", "my-object", "my-filename")# 下载版本ID为的对象的数据
client.fget_object("my-bucket", "my-object", "my-filename",version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)# 下载SSE-C加密对象的数据
client.fget_object("my-bucket", "my-object", "my-filename",ssec=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)

2.2 复制对象数据

from datetime import datetime, timezone
from minio.commonconfig import REPLACE, CopySource# 将一个对象从一个桶复制到另一个桶
result = client.copy_object("my-bucket","my-object",CopySource("my-sourcebucket", "my-sourceobject"),
)
print(result.object_name, result.version_id)# 复制有条件的对象
result = client.copy_object("my-bucket","my-object",CopySource("my-sourcebucket","my-sourceobject",modified_since=datetime(2014, 4, 1, tzinfo=timezone.utc),),
)
print(result.object_name, result.version_id)# 用替换元数据从bucket复制对象
metadata = {"test_meta_key": "test_meta_value"}
result = client.copy_object("my-bucket","my-object",CopySource("my-sourcebucket", "my-sourceobject"),metadata=metadata,metadata_directive=REPLACE,
)
print(result.object_name, result.version_id)

2.3 副本组合创建对象

from minio.commonconfig import ComposeSource
from minio.sse import SseS3sources = [ComposeSource("my-job-bucket", "my-object-part-one"),ComposeSource("my-job-bucket", "my-object-part-two"),ComposeSource("my-job-bucket", "my-object-part-three"),
]#通过组合源对象创建我的bucket/my object
#名单
result = client.compose_object("my-bucket", "my-object", sources)
print(result.object_name, result.version_id)#通过组合使用用户元数据创建my bucket/my object
#源对象列表。
result = client.compose_object("my-bucket","my-object",sources,metadata={"test_meta_key": "test_meta_value"},
)
print(result.object_name, result.version_id)#使用用户元数据和
#通过组合源对象列表进行服务器端加密。
client.compose_object("my-bucket", "my-object", sources, sse=SseS3())
print(result.object_name, result.version_id)

2.4 本地数据流上传到对象

# 上传数据
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传大小未知的数据
data = urlopen("https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.81.tar.xz",
)
result = client.put_object("my-bucket", "my-object", data, length=-1, part_size=10*1024*1024,
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传内容类型为application/csv的数据
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,content_type="application/csv",
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传带有元数据的数据
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,metadata={"My-Project": "one"},
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用服务器端加密的客户密钥类型上载数据
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用KMS类型的服务器端加密上载数据。
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用S3类型的服务器端加密上传数据。
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,sse=SseS3(),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传带有标签、保留和法律封存的数据。
date = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,tags=tags,retention=Retention(GOVERNANCE, date),legal_hold=True,
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 用进度条上传数据。
result = client.put_object("my-bucket", "my-object", io.BytesIO(b"hello"), 5,progress=Progress(),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)

2.5 将文件中的数据上传到存储桶中的对象

# 上传数据
result = client.fput_object("my-bucket", "my-object", "my-filename",
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传内容类型为application/csv的数据
result = client.fput_object("my-bucket", "my-object", "my-filename",content_type="application/csv",
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传带有元数据的数据
result = client.fput_object("my-bucket", "my-object", "my-filename",metadata={"My-Project": "one"},
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用服务器端加密的客户密钥类型上载数据
result = client.fput_object("my-bucket", "my-object", "my-filename",sse=SseCustomerKey(b"32byteslongsecretkeymustprovided"),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用KMS类型的服务器端加密上载数据。
result = client.fput_object("my-bucket", "my-object", "my-filename",sse=SseKMS("KMS-KEY-ID", {"Key1": "Value1", "Key2": "Value2"}),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 使用S3类型的服务器端加密上传数据。
result = client.fput_object("my-bucket", "my-object", "my-filename",sse=SseS3(),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 上传带有标签、保留和法律封存的数据。
date = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0,
) + timedelta(days=30)
tags = Tags(for_object=True)
tags["User"] = "jsmith"
result = client.fput_object("my-bucket", "my-object", "my-filename",tags=tags,retention=Retention(GOVERNANCE, date),legal_hold=True,
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)# 用进度条上传数据
result = client.fput_object("my-bucket", "my-object", "my-filename",progress=Progress(),
)
print("created {0} object; etag: {1}, version-id: {2}".format(result.object_name, result.etag, result.version_id,),
)

3.对象删除

3.1 移除一个对象

# 移除对象
client.remove_object("my-bucket", "my-object")# 删除对象的版本
client.remove_object("my-bucket", "my-object",version_id="dfbd25b3-abec-4184-a4e8-5a35a5c1174d",
)

3.2 移除多个对象

# 删除对象列表
errors = client.remove_objects("my-bucket",[DeleteObject("my-object1"),DeleteObject("my-object2"),DeleteObject("my-object3", "13f88b18-8dcd-4c83-88f2-8631fdb6250c"),],
)
for error in errors:print("error occured when deleting object", error)# 递归删除前缀
delete_object_list = map(lambda x: DeleteObject(x.object_name),client.list_objects("my-bucket", "my/prefix/", recursive=True),
)
errors = client.remove_objects("my-bucket", delete_object_list)
for error in errors:print("error occured when deleting object", error)

二、对象标签配置

1.删除对象的标签配置

client.delete_object_tags("my-bucket", "my-object")

2.获取对象的标签配置

tags = client.get_object_tags("my-bucket", "my-object")

3.设置对象的标签配置

tags = Tags.new_object_tags()
tags["Project"] = "Project One"
tags["User"] = "jsmith"
client.set_object_tags("my-bucket", "my-object", tags)

三、对象合法保留

1.禁用对象的合法保留

client.disable_object_legal_hold("my-bucket", "my-object")

2.启用对象的合法保留

client.enable_object_legal_hold("my-bucket", "my-object")

3.判断对象的合法保留是否存在

if client.is_object_legal_hold_enabled("my-bucket", "my-object"):print("legal hold is enabled on my-object")
else:print("legal hold is not enabled on my-object")

3.获取对象的合法保留信息

config = client.get_object_retention("my-bucket", "my-object")

4.设置对象的合法保留信息

config = Retention(GOVERNANCE, datetime.utcnow() + timedelta(days=10))
client.set_object_retention("my-bucket", "my-object", config)

四、对象预签名 URL

1.获取对象的预签名 URL 以下载其具有到期时间和自定义请求参数的数据

#获取预先签名的URL字符串以在中下载“我的对象”
#“我的桶”默认到期(即7天)。
url = client.presigned_get_object("my-bucket", "my-object")
print(url)#获取预先签名的URL字符串以在中下载“我的对象”
#“我的桶”过期两小时。
url = client.presigned_get_object("my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)

2.获取对象的预签名 URL 以上传具有到期时间和自定义请求参数的数据

#获取预先签名的URL字符串以在中下载“我的对象”
#“我的桶”默认到期(即7天)。
url = client.presigned_put_object("my-bucket", "my-object")
print(url)#获取预先签名的URL字符串以在中下载“我的对象”
#“我的桶”过期两小时。
url = client.presigned_put_object("my-bucket", "my-object", expires=timedelta(hours=2),
)
print(url)

五、对象 PostPolicy

1.获取对象 PostPolicy 的表单数据以使用 POST 方法上传其数据

policy = PostPolicy("my-bucket", datetime.utcnow() + timedelta(days=10),
)
policy.add_starts_with_condition("key", "my/object/prefix/")
policy.add_content_length_range_condition(1*1024*1024, 10*1024*1024,
)
form_data = client.presigned_post_policy(policy)

六、HTTP 方法

1.获取 HTTP 方法、到期时间和自定义请求参数的对象的预签名 URL

#获取预先签名的URL字符串以删除中的“我的对象”
#“我的桶”过期一天。
url = client.get_presigned_url("DELETE","my-bucket","my-object",expires=timedelta(days=1),
)
print(url)#获取预先签名的URL字符串以在中上载“我的对象”
#响应内容类型为application/json的“my bucket
#一天到期。
url = client.get_presigned_url("PUT","my-bucket","my-object",expires=timedelta(days=1),response_headers={"response-content-type": "application/json"},
)
print(url)#获取预先签名的URL字符串以在中下载“我的对象”
#“我的桶”过期两小时。
url = client.get_presigned_url("GET","my-bucket","my-object",expires=timedelta(hours=2),
)
print(url)

【愚公系列】2022年01月 MinIO文件存储服务器-对象操作(Python版)相关推荐

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

    文章目录 一.python对接MinIO 1.首先执行命令安装包 2.创建客户端 3.桶操作 3.1 创建桶 3.2 查询桶 3.2.1 查询桶和判断桶是否存在 3.2.2 列出桶的对象信息 3.3 ...

  2. 【愚公系列】2022年01月 MinIO文件存储服务器-window11下的安装

    文章目录 前言 1.平常存储文件 2.第三方平台存储文件 3.自搭分布式文件系统 一.MINIO是什么? 二.MINIO安装流程 总结 前言 1.平常存储文件 在开发中经常会用到的就是文件存储了,以前 ...

  3. 【愚公系列】2022年01月 华为鸿蒙OS-03-四种模式开发实操

    文章目录 前言 一.使用JS语言开发(传统代码方式) 1.index页面源码 2.details页面源码 二.使用JS语言开发(低代码方式) 1.新建工程:注意选择 2.选择低代码新建页面 3.页面分 ...

  4. 2022年01月世界编程语言排行

    2022年01月世界编程语言排行 2022年1月TIOBE指数 一月标题:2021年度Python编程语言 Python赢得了久负盛名的TIOBE编程语言奖.祝贺!这是连续第二次.该奖项授予一年内获得 ...

  5. 【愚公系列】回顾2022年技术博客的总结与展望

    文章目录 前言 一.回顾2022年的活动和成就 1.2022年所做的事 2.2022年收获和成就 二.分析2022年的表现 1.过去一年优缺点分析 2.过去一年表现认同度 三.展望2023年的计划 1 ...

  6. 【愚公系列】(HDC.Cloud)华为开发者大会游记

    文章目录 前言 一.(HDC.Cloud)华为开发者大会游记 1.受邀参加 2.开发者大会首页 3.第一天 4.第二天 5.第三天 总结 前言 HDC.Cloud华为开发者大会是由华为举办的一年一度的 ...

  7. 【愚公系列】华为产品测评官-开发者之声(CodeArts产品流程体验)

    文章目录 前言 一.华为云CodeArts产品体验 1.软件开发生产线使用流程 1.1 配置项目 1.2 配置代码仓库 1.3 配置流水线 2.使用软件开发生产线快速搭建项目(ECS篇) 2.1 前提 ...

  8. 虎啸龙吟之国产数据库风云榜-2022年01月

    绝壁刻字 自古华山一条路,奇险天下第一山. 太阳初升,只见墨老大(墨天轮)一身白衣,潇洒飘逸,萧疏轩举,湛然若神,忽见身体瞬间横移,不见腿下脚下有任何动作,身体却出现在几十丈之外,使用的正是移形换位之 ...

  9. QLExpress 系列入门教程-02-QLExpress java 语法,java 对象操作

    目录 目录 普通 java 语法 语法支持 例子 Java 对象操作 测试案例 导航 普通 java 语法 语法支持 序号 符号 备注 1 +,-,*,/,<,>,<=,>=, ...

最新文章

  1. 解决虚拟器device support x86 but apk only supports armeabi-v7
  2. shiro学习总结(一)----初识shiro
  3. 那些计算机界的伟大女性
  4. hdu 1257最少拦截系统 动态规划
  5. 为什么在使用get时,Properties对象总是忽略默认值?
  6. 使用Axure制作App原型的尺寸设置
  7. mysql tree_MySQL树形遍历(二)
  8. 【Lucene】lucene 视频教程 笔记
  9. window添加右键菜单
  10. Java不适合于作为主要编程教学语言 -- 孟岩
  11. 开务正式加入中国信通院数据库应用创新实验室
  12. 机顶盒改成无线打印服务器,【当贝市场】如何将网络机顶盒改装成无线路由器...
  13. 39份AICon全球人工智能与机器学习技术大会 · 北京站2021(PPT汇总)
  14. java裂变_微信现金红包单一红包、裂变红包(Java版)
  15. 「BJOI 2019」排兵布阵
  16. 简单的爬取某租房网站租房信息并存入MySQL数据库
  17. android 图片轮播sli,又一个安卓slider/seekbar – android-slidr
  18. 03-Python正则表达式
  19. vue 折叠效果动画
  20. RFID 动态Q静态Q是什么意思

热门文章

  1. i.MX 6ULL 驱动开发 二十九:向 Linux 内核中添加自己编写驱动
  2. Lorenz系统的MATLAB/Simulink建模
  3. stm32 命名含义
  4. 《二》微信小程序中的 WXML
  5. 邻域线性判别《Neighborhood linear discriminant analysis》
  6. 华为/荣耀可安装谷歌GMS!Mate30/Pro安装亲测有效!
  7. android 平板电脑定制,安卓工业平板电脑应用及定制开发
  8. APP性能测试之冷热启动时间查看
  9. 百度相关关键词批量采集并生成标题源码
  10. 什么是HDR拍摄模式及使用方法