python如何设置标签_设置对象标签_对象标签_Python_SDK 示例_对象存储 OSS - 阿里云...

OSS支持使用对象标签(Object Tagging)对存储的Object进行分类,您可以针对同标签的Object设置生命周期规则、访问权限等。

背景信息

设置对象标签时,请注意以下事项:

您可以在上传Object时设置对象标签,也可以对已上传Object设置对象标签。设置对象标签时,若对象已有标签,则覆盖原标签。设置对象标签的详情请参考PutObjectTagging。

设置对象标签时要求请求者有PutObjectTagging权限。

更改标签时不会更新Object的Last‑Modified时间。

标签合法字符集包括大小写字母、数字、空格和以下符号:

+‑=._:/

说明 通过HTTP header的方式设置标签且标签中包含任意字符时,您可以对标签的Key和Value做URL编码。

对象标签使用一组键值对(Key-Value)来标记对象。对象标签的详情请参见对象标签。

上传Object时添加对象标签

简单上传时添加对象标签

以下代码用于简单上传Object时添加对象标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

object_name = ''

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 调用put_object接口时指定headers,将会为上传的文件添加标签。

result = bucket.put_object(object_name, 'content', headers=headers)

print('http response status: ', result.status)

# 查看Object的标签信息。

result = bucket.get_object_tagging('yourObjectName')

for key in result.tag_set.tagging_rule:

print('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

分片上传时添加对象标签

以下代码用于通过multipart_upload方式上传Object时添加对象标签:

# -*- coding: utf-8 -*-

import os

import oss2

from oss2 import SizedFileAdapter, determine_part_size

from oss2.models import PartInfo

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

object_name = ''

filename = ''

total_size = os.path.getsize(filename)

# determine_part_size方法用于确定分片大小。

part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 初始化分片。

# 调用init_multipart_upload接口时指定headers,将会给上传的文件添加标签。

upload_id = bucket.init_multipart_upload(object_name, headers=headers).upload_id

parts = []

# 逐个上传分片。

with open(filename, 'rb') as fileobj:

part_number = 1

offset = 0

while offset < total_size:

num_to_upload = min(part_size, total_size - offset)

# SizedFileAdapter(fileobj, size)方法会生成一个新的文件对象,重新计算起始追加位置。

result = bucket.upload_part(object_name, upload_id, part_number,

SizedFileAdapter(fileobj, num_to_upload))

parts.append(PartInfo(part_number, result.etag))

offset += num_to_upload

part_number += 1

# 完成分片上传。

result = bucket.complete_multipart_upload(object_name, upload_id, parts)

print('http response status: ', result.status)

# 查看Object的标签信息。

result = bucket.get_object_tagging(object_name)

for key in result.tag_set.tagging_rule:

print('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

# 验证分片上传。

with open(filename, 'rb') as fileobj:

assert bucket.get_object(object_name).read() == fileobj.read()

追加上传时添加对象标签

以下代码用于通过append_object方式上传Object时添加对象标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

object_name = ''

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 追加上传文件。调用append_object接口时指定headers,将会给文件设置标签。

# 只有第一次调用append_object设置的标签才会生效,后续使用此种方式添加的标签不生效。

result = bucket.append_object(object_name, 0, '', headers=headers)

# 查看Object的标签信息。

result = bucket.get_object_tagging('yourObjectName')

for key in result.tag_set.tagging_rule:

print('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

断点续传上传时添加对象标签

以下代码用于通过resumable_upload方式上传Object时添加对象标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

object_name = ''

local_file = ''

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 当文件长度大于或等于可选参数multipart_threshold(默认值为10 MB)时使用分片上传。如未使用参数store指定目录,则会在HOME目录下建立.py-oss-upload目录来保存断点信息。

# 调用resumable_upload接口时指定headers,将会给上传的文件添加标签。

oss2.resumable_upload(bucket, object_name, local_file, headers=headers)

result = bucket.get_object_tagging(object_name)

for key in result.tag_set.tagging_rule:

print('object tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

对已上传Object添加或更改对象标签

以下代码用于对已上传Object添加或更改对象标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.models import Tagging, TaggingRule

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 创建标签规则。

rule = TaggingRule()

rule.add('key1', 'value1')

rule.add('key2', 'value2')

# 创建标签。

tagging = Tagging(rule)

# 设置标签。

result = bucket.put_object_tagging('', tagging)

# 查看HTTP返回码。

print('http response status:', result.status)

拷贝Object时设置对象标签

拷贝Object时,可以指定如何设置目标Object的对象标签。取值如下:

Copy(默认值):复制源Object的对象标签到目标Object。

Replace:忽略源Object的对象标签,直接采用请求中指定的对象标签。

以下分别提供了简单拷贝1 GB以下的Object、及分片拷贝1 GB以上的Object时设置对象标签的详细示例。

以下代码用于简单拷贝1 GB以下的Object时设置对象标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.headers import OSS_OBJECT_TAGGING, OSS_OBJECT_TAGGING_COPY_DIRECTIVE

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 指定源文件。

src_object_name = ''

# 指定目标文件1。

dest_object_name1 = ''

# 指定目标文件2。

dest_object_name2 = ''

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中指定OSS_OBJECT_TAGGING_COPY_DIRECTIVE参数为COPY或者默认不指定,则目标文件1将会拥有源文件同样的标签信息。

headers=dict()

headers[OSS_OBJECT_TAGGING_COPY_DIRECTIVE] = 'COPY'

bucket.copy_object(bucket.bucket_name, src_object_name, dest_object_name1, headers=headers)

# 在HTTP header中指定OSS_OBJECT_TAGGING_COPY_DIRECTIVE参数为REPLACE,则目标文件2的标签信息将会设置为headers[OSS_OBJECT_TAGGING]指定的标签信息。

headers[OSS_OBJECT_TAGGING_COPY_DIRECTIVE] = 'REPLACE'

headers[OSS_OBJECT_TAGGING] = tagging

bucket.copy_object(bucket.bucket_name, src_object_name, dest_object_name2, headers=headers)

# 查看src_object_name的标签信息。

result = bucket.get_object_tagging(src_object_name)

for key in result.tag_set.tagging_rule:

print('src tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

# 查看目标文件1的标签信息。目标文件1的标签信息与源文件的标签信息保持一致。

result = bucket.get_object_tagging(dest_object_name1)

for key in result.tag_set.tagging_rule:

print('dest1 object tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

# 查看目标文件2的标签信息。目标文件2的标签信息为headers[OSS_OBJECT_TAGGING]指定的标签信息。

result = bucket.get_object_tagging(dest_object_name2)

for key in result.tag_set.tagging_rule:

print('dest2 object tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

以下代码用于分片拷贝1 GB以上的Object时设置对象标签:

# -*- coding: utf-8 -*-

import os

import oss2

from oss2 import determine_part_size

from oss2.models import PartInfo

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 指定源文件。

src_object_name = ''

# 指定目标文件。

dest_object_name = ''

# 获取源文件的文件大小。

head_info = bucket.head_object(src_object_name)

total_size = head_info.content_length

print('src object size:', total_size)

# determine_part_size方法用于确定分片大小。

part_size = determine_part_size(total_size, preferred_size=100 * 1024)

print('part_size:', part_size)

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 初始化分片。

# 调用init_multipart_upload接口时指定headers,将会给目标文件添加标签。

upload_id = bucket.init_multipart_upload(dest_object_name, headers=headers).upload_id

parts = []

# 逐个上传分片。

part_number = 1

offset = 0

while offset < total_size:

num_to_upload = min(part_size, total_size - offset)

end = offset + num_to_upload - 1;

result = bucket.upload_part_copy(bucket.bucket_name, src_object_name, (offset, end), dest_object_name, upload_id, part_number)

#保存part信息

parts.append(PartInfo(part_number, result.etag))

offset += num_to_upload

part_number += 1

# 完成分片上传。

result = bucket.complete_multipart_upload(dest_object_name, upload_id, parts)

# 获取文件元信息。

head_info = bucket.head_object(dest_object_name)

# 查看目标文件大小。

dest_object_size = head_info.content_length

print('dest object size:', dest_object_size)

# 对比源文件大小。

assert dest_object_size == total_size

# 查看源文件的标签信息。

result = bucket.get_object_tagging(src_object_name)

for key in result.tag_set.tagging_rule:

print('src tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

# 查看目标文件的标签信息。

result = bucket.get_object_tagging(dest_object_name)

for key in result.tag_set.tagging_rule:

print('dest tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

为软链接文件设置标签

以下代码用于为软链接文件设置标签:

# -*- coding: utf-8 -*-

import oss2

from oss2.headers import OSS_OBJECT_TAGGING

# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。

auth = oss2.Auth('', '')

# Endpoint以杭州为例,其它Region请按实际情况填写。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

object_name = ''

symlink_name = ''

# 设置tagging字符串。

tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。

k4 = "k4+‑="

v4 = "+‑=._:/"

tagging += "&” + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。

headers = dict()

headers[OSS_OBJECT_TAGGING] = tagging

# 添加软链接。

# 调用put_symlink接口时指定headers,将会给软链接文件添加标签。

result = bucket.put_symlink(object_name, symlink_name, headers=headers)

print('http response status: ', result.status)

# 查看软链接文件的标签信息。

result = bucket.get_object_tagging(symlink_name)

for key in result.tag_set.tagging_rule:

print('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值