帮你快速理解、总结文档立即下载

高级复制对象

最近更新时间:2026-10-21 18:34:06
我的收藏
高级复制文件对象(copy)。SDK 查询源文件后选择直接复制或分块复制,分块路径自动组织上传分块与最终完成请求。

注意事项

操作的存储桶应处于 Available 状态;传输失败可能表现为服务端、客户端或本地文件异常,处理方式见 Python SDK 异常处理。
仅支持同桶、同地域的文件对象复制;源 Bucket 与目标 Bucket 相同,CopySource.Region 与客户端 Region 相同。对象键尾斜杠严格区分类型,不支持目录复制;源类型不匹配按不存在处理。由于包含源 HEAD,高级接口可能先返回 HTTP 404,而不是低层复制接口的参数错误。
默认复制阈值为 5GB;按本文示例不传 StorageClass 时,当前高性能桶通常在小于阈值时直接复制,达到阈值时分块复制。不要将 PartSize 当作选择分块复制的阈值。
显式传入与源一致的 StorageClass 可能优先选择直接复制,不受大小阈值控制;超大文件可能因此超过直接复制的 5GB 限制。需要可靠控制每个步骤时,请使用手动分块复制接口。
分块复制期间请保持源文件不变;本接口不提供对象版本快照。高性能桶不支持 CopySource.VersionId。
ForbidOverwrite='true' 同时用于直接复制和最终 Complete;省略或传 "false" 允许覆盖已有文件。防覆盖失败时不能通过删除参数重试来保持原保护要求。
CopyStatus 的元数据复制方式仅用于直接复制路径。分块路径的目标元数据来自本次初始化请求,不自动继承源对象元数据;需要保留时先查询源元数据,再将实际需要的 ContentType、Metadata 等显式传入。直接复制时若要用本次参数替换源元数据,还需设置 CopyStatus='Replaced'。
本接口不自动恢复上次失败的复制任务,也没有本地进度回调参数。分块失败可能遗留未完成任务;Complete 抛错时会尝试终止该任务,但不能保证任意失败都自动清理。响应丢失时先核对目标对象状态,放弃任务时按明确的 UploadId 清理。

请求

方法原型

def copy(self, Bucket, Key, CopySource, CopyStatus='Copy', PartSize=10, MAXThread=5, **kwargs)

参数说明

参数
说明
类型
是否必选
Bucket
高性能桶完整名称,例如 examplebucket-x--1250000000
string
是
Key
文件对象键,不以 / 结尾
string
是
CopySource
字典,含 Bucket、Key、Region;源键不以 / 结尾
dict
是
CopyStatus
Copy(默认)或 Replaced;仅直接复制路径的元数据策略
string
否
PartSize
分块复制大小,正整数,默认 10,单位 MB;每块不超过 5GB
int
否
MAXThread
分块复制并发线程数,正整数,默认 5
int
否
ForbidOverwrite
关键字参数,仅 "true" / "false"
string
否
ContentType / Metadata
显式设置的目标元数据;自定义元数据键以 x-cos-meta- 开头
string / dict
否
kwargs
可选请求参数,使用本文列出的参数;按本页示例不传 StorageClass
dict
否

响应

返回字典,可读取 ETag;其他字段随直接复制或 Complete 路径而异,不承诺返回可访问的 Location URL。

错误码

本接口遵循统一的错误响应和错误码,详情请参见 错误码文档。

实际案例

# -*- coding: utf-8 -*-
import os
from qcloud_cos import CosConfig, CosS3Client

# 高性能桶经 VPC 内网 HTTP 80 端口接入,SDK 的网关 DNS 负载均衡也仅对 HTTP 请求生效;SDK 默认 https,此处需显式指定 http。
config = CosConfig(
Scheme='http', Region='ap-guangzhou',
SecretId=os.environ['COS_SECRET_ID'],
SecretKey=os.environ['COS_SECRET_KEY'],
Token=os.environ.get('COS_SECURITY_TOKEN'),
EnableRapidDomain=True)
client = CosS3Client(config)
bucket = 'examplebucket-x--1250000000'

result = client.copy(
Bucket=bucket, Key='copies/report.bin',
CopySource={'Bucket': bucket, 'Key': 'uploads/report.bin', 'Region': 'ap-guangzhou'},
PartSize=8, MAXThread=4, ForbidOverwrite='true')
print('copy completed, ETag: %s' % result['ETag'])
# 本例复制文件内容;如需保留源元数据,请按本页注意事项显式设置。