拷贝Object
更新时间:2022-10-14
拷贝一个文件
用户可以通过copyObject方法拷贝一个Object,如下代码所示:
client.copy_object(source_bucket_name, source_object_key, target_bucket_name, target_object_key)
copy_object
方法可以通过options
配置可选参数,参数列表参考如下:
参数 | 说明 |
---|---|
user-metadata | 用户自定义Meta,包含Key-Value对 |
eTag | Source Object的eTag,若选择上传,则会对Target Object和Source Object的eTag进行比对,若不相同,则返回错误。 |
同步Copy
当前BOS的CopyObject接口是通过同步方式实现的。同步方式下,BOS端会等待Copy实际完成才返回成功。同步Copy能帮助用户更准确的判断Copy状态,但用户感知的复制时间会变长,且复制时间和文件大小成正比。
同步Copy方式更符合业界常规,提升了与其它平台的兼容性。同步Copy方式还简化了BOS服务端的业务逻辑,提高了服务效率。
分块拷贝
除了通过CopyObject接⼝拷贝文件以外,BOS还提供了另外一种拷贝模式——Multipart Upload Copy。用户可以在如下的应用场景内(但不仅限于此),使用Multipart Upload Copy,如:
- 需要支持断点拷贝。
- 拷贝超过5GB大小的文件。
- 网络条件较差,和BOS的服务器之间的连接经常断开。
下面将介绍分步实现三步拷贝。
三步拷贝包含init、“拷贝分块”和complete三步,其中init和complete的操作同分块上传一致,可直接参考初始化Multipart Upload和完成分块上传。
left_size = client.get_object_meta_data(source_bucket_name, source_object_key)['content-length']
offset = 0
part_number = 1
part_list = []
while left_size > 0 do
part_size = 5 * 1024 * 1024
if left_size < part_size
part_size = left_size
end
response = client.upload_part_copy(
source_bucket_name, source_object_key, target_bucket_name, target_object_key, upload_id, part_number, part_size, offset)
left_size -= part_size
offset += part_size
# your should store every part number and etag to invoke complete multi-upload
part_list << {
"partNumber" => part_number,
"eTag" => response["eTag"]
}
part_number += 1
end
注意: size参数以字节为单位,定义每个分块的大小,除最后一个Part以外,其他的Part大小都要大于5MB。