简介
本文介绍对象存储 COS 通过 Python SDK 实现复制与移动对象功能的示例代码和描述。包括高级接口、简单操作两个部分。
注意事项
若您使用简单接口复制对象,需要具有源对象的读权限和目标对象的写权限:在您进行 授权策略 时,目标对象的授权 action 需要设置为
cos:PutObject
,源对象的授权 action 需要设置为cos:GetObject
,更多授权请参见 支持CAM的业务接口。若您使用高级接口的自动分块复制或使用简单接口的分块操作实现分块复制,需要具有源对象的读权限以及目标对象的初始化分块上传、上传对象、完成分块上传的权限:在您进行 授权策略 时,目标对象的授权 action 需要设置为
cos:InitiateMultipartUpload
,cos:PutObject
,cos:CompleteMultipartUpload
,源对象的授权 action 需要设置为cos:GetObject
,更多授权请参见 支持CAM的业务接口。相关示例
功能名称 | 描述 | 示例代码 |
高级接口 | 高级接口封装了简单拷贝、分块拷贝接口,根据文件大小智能的选择拷贝对象的方式。 | |
简单操作 | 简单操作的拷贝接口可以拷贝一个对象至指定存储桶中,不支持自动分块拷贝。最大支持拷贝不超过5GB的对象,5GB以上对象请使用高级接口拷贝。 |
高级接口(推荐)
功能说明
该高级接口可支持小于5G的文件调用 copy_object,大于等于5G的文件调用分块上传的 upload_part_copy。
方法原型
copy(Bucket, Key, CopySource, CopyStatus='Copy', PartSize=10, MAXThread=5, **kwargs)
使用案例:复制对象
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.INFO, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region 等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.environ['COS_SECRET_ID'] # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.environ['COS_SECRET_KEY'] # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-beijing' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket# COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)client = CosS3Client(config)response = client.copy(Bucket='examplebucket-1250000000',Key='exampleobject',CopySource={'Bucket': 'sourcebucket-1250000000','Key': 'sourceobject','Region': 'ap-guangzhou'})
使用案例:移动对象
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.INFO, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在 CosConfig 中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.environ['COS_SECRET_ID'] # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.environ['COS_SECRET_KEY'] # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-beijing' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket# COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224token = None # 如果使用永久密钥不需要填入token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)client = CosS3Client(config)bucket = 'examplebucket-1250000000'srcKey = 'src_object_key' # 原始的对象路径destKey = 'dest_object_key' # 目的对象路径# COS本身没有移动对象的接口,所谓移动就是先拷贝老对象到新对象,再删除老对象。response = client.copy(Bucket=bucket,Key=destKey,CopySource={'Bucket':bucket,'Key':srcKey,'Region':'ap-guangzhou'})client.delete_object(Bucket=bucket, Key=srcKey)
全部参数请求示例
response = client.copy(Bucket='examplebucket-1250000000',Key='exampleobject',CopySource={'Bucket': 'sourcebucket-1250000000','Key': 'exampleobject','Region': 'ap-guangzhou'},CopyStatus='Copy'|'Replaced',PartSize=20,MAXThread=10)
参数说明
参数名称 | 参数描述 | 类型 | 是否必填 |
Bucket | 存储桶名称,由 BucketName-APPID 构成 | String | 是 |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | String | 是 |
CopySource | 描述拷贝源对象的路径,包含 Bucket、Key、Region、VersionId | Dict | 是 |
CopyStatus | 拷贝状态,可选值 Copy、Replaced | String | 否 |
PartSize | 分块下载的分块大小,默认为10MB | Int | 否 |
MAXThread | 分块下载的并发数量,默认为5个线程下载分块 | Int | 否 |
返回结果说明
若小于5G的文件,则为 copy_object 的返回结果,否则为 complete_multipart_upload 的返回结果,类型为 dict。
简单操作
功能说明
复制文件到目标路径(PUT Object - Copy)。
方法原型
copy_object(Bucket, Key, CopySource, CopyStatus='Copy', **kwargs)
使用案例:复制对象
源和目标是不同的对象,会生成一个新的目标对象,目标对象会复制源对象的元数据信息。
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.INFO, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在CosConfig中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.environ['COS_SECRET_ID'] # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.environ['COS_SECRET_KEY'] # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-beijing' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket# COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)client = CosS3Client(config)response = client.copy_object(Bucket='examplebucket-1250000000',Key='exampleobject',CopySource={'Bucket': 'sourcebucket-1250000000','Key': 'sourceobject','Region': 'ap-guangzhou'})
使用案例:移动对象
COS本身没有移动对象的接口,所谓移动就是先拷贝老对象到新对象,再删除老对象。
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport osimport logging# 正常情况日志级别使用 INFO,需要定位时可以修改为 DEBUG,此时 SDK 会打印和服务端的通信信息logging.basicConfig(level=logging.INFO, stream=sys.stdout)# 1. 设置用户属性, 包括 secret_id, secret_key, region等。Appid 已在CosConfig中移除,请在参数 Bucket 中带上 Appid。Bucket 由 BucketName-Appid 组成secret_id = os.environ['COS_SECRET_ID'] # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140secret_key = os.environ['COS_SECRET_KEY'] # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140region = 'ap-beijing' # 替换为用户的 region,已创建桶归属的 region 可以在控制台查看,https://console.cloud.tencent.com/cos5/bucket# COS 支持的所有 region 列表参见 https://cloud.tencent.com/document/product/436/6224token = None # 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://cloud.tencent.com/document/product/436/14048scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)client = CosS3Client(config)response = client.copy_object(Bucket='examplebucket-1250000000',Key='exampleobject',CopySource={'Bucket': 'sourcebucket-1250000000','Key': 'sourceobject','Region': 'ap-guangzhou'})client.delete_object(Bucket='sourcebucket-1250000000', Key='sourceobject')
全部参数请求示例
response = client.copy_object(Bucket='examplebucket-1250000000',Key='exampleobject',CopySource={'Bucket': 'sourcebucket-1250000000','Key': 'sourceobject','Region': 'ap-guangzhou','VersionId': 'string'},CopyStatus='Copy'|'Replaced',ACL='private'|'public-read',GrantFullControl='string',GrantRead='string',StorageClass='STANDARD'|'STANDARD_IA',Expires='string',CacheControl='string',ContentType='string',ContentDisposition='string',ContentEncoding='string',ContentLanguage='string',Metadata={'x-cos-meta-key1': 'value1','x-cos-meta-key2': 'value2'})
参数说明
参数名称 | 参数描述 | 类型 | 是否必填 |
Bucket | 存储桶名称,由 BucketName-APPID 构成 | String | 是 |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg 中,对象键为 doc/pic.jpg | String | 是 |
CopySource | 描述拷贝源对象的路径,包含 Bucket、Key、Region、VersionId | Dict | 是 |
CopyStatus | 可选值为 Copy、Replaced,设置为 Copy 时,忽略设置的用户元数据信息直接复制,设置为 Replaced 时,按设置的元信息修改元数据,当目标路径和源路径一样时,必须设置为 Replaced | String | 是 |
ACL | 设置对象的 ACL,如 private,public-read | String | 否 |
GrantFullControl | 赋予指定账户对对象的所有权限,格式为 id="OwnerUin" | String | 否 |
GrantRead | 赋予指定账户对对象的读权限,格式为 id="OwnerUin" | String | 否 |
StorageClass | 设置对象的存储类型,STANDARD,STANDARD_IA,默认值 STANDARD | String | 否 |
Expires | 设置 Expires | String | 否 |
CacheControl | 缓存策略,设置 Cache-Control | String | 否 |
ContentType | 内容类型,设置 Content-Type | String | 否 |
ContentDisposition | 文件名称,设置 Content-Disposition | String | 否 |
ContentEncoding | 编码格式,设置 Content-Encoding | String | 否 |
ContentLanguage | 语言类型,设置 Content-Language | String | 否 |
Metadata | 用户自定义的对象元数据 | Dict | 否 |
返回结果说明
拷贝对象的属性,类型为 dict:
{'ETag': 'string','CRC64': 'string','LastModified': 'string','VersionId': 'string','x-cos-request-id': 'string','x-cos-copy-source-version-id': 'string'}
参数名称 | 参数描述 | 类型 |
ETag | 拷贝对象的 MD5 值 | String |
CRC64 | 拷贝对象的 CRC64 校验值 | String |
LastModified | 拷贝对象的最后一次修改时间 | String |
VersionId | 开启版本控制后,目的对象的版本号 | String |
x-cos-request-id | 请求ID | String |
x-cos-copy-source-version-id | 源对象的版本号 | String |
API 操作