最近更新时间:2025-03-06 10:34:56
普通复制适用于小文件的复制(文件大小建议小于1GB),当文件大小大于5GB时,必须使用分块复制。
以下代码用于普通复制文件:
from ks3.connection import Connection
# 金山云主账号 AccessKey 拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
# 通过指定 host(Endpoint),您可以在指定的地域创建新的存储空间。host(Endpoint) 以北京为例,其它 Region 请按实际情况填写。
conn = Connection('<yourAccessKeyId>', '<yourAccessKeySecret>', host='ks3-cn-beijing.ksyuncs.com')
# 获取存储空间实例
b = conn.get_bucket('<yourBucketName>')
# 空间名称必须有效,同时用户需要拥有对拷贝对象的读权限。
# <yourDstKeyName> 为新对象名称,<yourSrcBucketName>是原存储空间名称,<yourSrcKeyName>是原对象名称
b.copy_key('<yourDstKeyName>', '<yourSrcBucketName>', '<yourSrcKeyName>')
以下代码用于分块复制文件,适用于大于1GB的文件:
当文件大小大于5GB时,必须使用分块复制方式。
from ks3.connection import Connection
import math
# 金山云主账号 AccessKey 拥有所有API的访问权限,风险很高。
# 强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
# 通过指定 host(Endpoint),您可以在指定的地域创建新的存储空间。host(Endpoint) 以北京为例,其它 Region 请按实际情况填写。
conn = Connection('<yourAccessKeyId>', '<yourAccessKeySecret>', host='ks3-cn-beijing.ksyuncs.com')
# 获取目标存储空间实例
b = conn.get_bucket('<yourBucketName>')
# 目标key名
target_key = 'target_key_name'
# 获取源key的元数据信息
source_key = b.get_key("src_key_name")
source_size = source_key.size
mp = b.initiate_multipart_upload(target_key)
print('initiate_multipart_upload, requestid: ', mp.response_metadata.request_id)
chunk_size = 52428800
count = int(math.ceil(source_size * 1.0 / chunk_size * 1.0))
for i in range(count):
start = chunk_size * i
end = min(start + chunk_size - 1, source_size - 1)
ret = mp.copy_part_from_key('src_bucket_name', source_key.name, i + 1, start, end)
print('copy_part_from_key, requestid: ', ret.response_metadata.request_id)
cmp = mp.complete_upload()
print('complete_upload, requestid: ', cmp.response_metadata.request_id)
if cmp and cmp.status == 200:
print("复制成功")
纯净模式