您可以通过拷贝方法将文件从一个存储空间(源存储空间)复制到同一地域的另一个存储空间(目标存储空间)中。
拷贝时限制条件如下:
- 用户有源文件的读写权限。
- 不支持跨地域拷贝。例如,不支持将杭州存储空间里的文件拷贝到青岛。
简单拷贝
对于小于1GB的文件,您可以使用简单拷贝。以下代码用于简单拷贝:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourDestinationBucketName>') bucket.copy_object('<yourSourceBucketName>', '<yourSourceObjectName>', '<yourDestinationObjectName>')
拷贝大文件
对于大于1GB的文件,需要使用分片拷贝(UploadPartCopy)。分片拷贝分为三步:
- 通过bucket.init_multipart_upload初始化分片拷贝任务。
- 通过bucket.upload_part_copy进行分片拷贝。除最后一个分片外,其它分片都要大于100KB。
- 通过bucket.complete_multipart_upload提交分片拷贝任务。
以下代码用于分片拷贝。
# -*- coding: utf-8 -*- import oss2 from oss2.models import PartInfo from oss2 import determine_part_size # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') src_object = '<yourSourceObjectName>' dst_object = '<yourDestinationObjectName>' total_size = bucket.head_object(src_object).content_length part_size = determine_part_size(total_size, preferred_size=100 * 1024) # 初始化分片。 upload_id = bucket.init_multipart_upload(dst_object).upload_id parts = [] # 逐个分片拷贝。 part_number = 1 offset = 0 while offset < total_size: num_to_upload = min(part_size, total_size - offset) byte_range = (offset, offset + num_to_upload - 1) result = bucket.upload_part_copy(bucket.bucket_name, src_object, byte_range,dst_object, upload_id, part_number) parts.append(PartInfo(part_number, result.etag)) offset += num_to_upload part_number += 1 # 完成分片拷贝。 bucket.complete_multipart_upload(dst_object, upload_id, parts)
分片拷贝的详细说明请参见UploadPartCopy。