拷贝Object
更新时间:2023-09-06
用户可以通过copyObject方法拷贝一个Object,如下代码所示:
bos_client.copy_object(source_bucket_name, source_object_key, target_bucket_name, target_object_key)
同步Copy功能
当前BOS的CopyObject接口是通过同步方式实现的。同步方式下,BOS端会等待Copy实际完成才返回成功。同步Copy能帮助用户更准确的判断Copy状态,但用户感知的复制时间会变长,且复制时间和文件大小成正比。
同步Copy方式更符合业界常规,提升了与其它平台的兼容性。同步Copy方式还简化了BOS服务端的业务逻辑,提高了服务效率。
归档类型文件如果是源Object,需要先取回归档类型文件。
如果您使用bce-python-sdk-0.8.12版本之前的SDK,有可能会出现复制请求成功,但文件实际复制失败的情况,所以建议您使用最新版本SDK。
分块拷贝
除了通过CopyObject接⼝拷贝文件以外,BOS还提供了另外一种拷贝模式——Multipart Upload Copy。归档类型文件如果是源Object,需要先取回归档类型文件。
用户可以在如下的应用场景内(但不仅限于此),使用Multipart Upload Copy,如:
- 需要支持断点拷贝。
- 拷贝超过5GB大小的文件。
- 网络条件较差,和BOS的服务器之间的连接经常断开。
下面将介绍分步实现三步拷贝。
三步拷贝包含init、“拷贝分块”和complete三步,其中init和complete的操作同分块上传一致,可直接参考初始化Multipart Upload和完成分块上传。
拷贝分块代码参考(参数定义可参考分块上传):
left_size = int(bos_client.get_object_meta_data(source_bucket,source_key).metadata.content_length)
#设置分块开始位置为left_size
#设置分块的开始偏移位置
offset = 0
part_number = 1
part_list = []
while left_size > 0:
#设置每块为5MB
part_size = 5 * 1024 * 1024
if left_size < part_size:
part_size = left_size
response = bos_client.upload_part_copy(source_bucket, source_key, target_bucket, target_key, upload_id,part_number, part_size, offset)
left_size -= part_size
offset += part_size
part_list.append({
"partNumber": part_number,
"eTag": response.etag
})
part_number += 1
注意:
- offset参数以字节为单位,为分块的开始偏移位置。
- size参数以字节为单位,定义每个分块的大小,除最后一个Part以外,其他的Part大小都要大于 5MB。