in oss2/api.py [0:0]
def upload_part_copy(self, source_bucket_name, source_key, byte_range,
target_key, target_upload_id, target_part_number,
headers=None, params=None):
"""分片拷贝。把一个已有文件的一部分或整体拷贝成目标文件的一个分片。
:source_bucket_name: 源文件所在bucket的名称
:source_key:源文件名称
:param byte_range: 指定待拷贝内容在源文件里的范围。参见 :ref:`byte_range`
:target_key: 目的文件的名称
:target_upload_id: 目的文件的uploadid
:target_part_number: 目的文件的分片号
:param params: 请求参数
:param headers: HTTP头部
:type headers: 可以是dict,建议是oss2.CaseInsensitiveDict
:return: :class:`PutObjectResult <oss2.models.PutObjectResult>`
"""
headers = http.CaseInsensitiveDict(headers)
if params and Bucket.VERSIONID in params:
headers[OSS_COPY_OBJECT_SOURCE] = '/' + source_bucket_name + \
'/' + urlquote(source_key, '') + '?versionId=' + params[Bucket.VERSIONID]
else:
headers[OSS_COPY_OBJECT_SOURCE] = '/' + source_bucket_name + '/' + urlquote(source_key, '')
range_string = _make_range_string(byte_range)
if range_string:
headers[OSS_COPY_OBJECT_SOURCE_RANGE] = range_string
logger.debug("Start to upload part copy, source bucket: {0}, source key: {1}, bucket: {2}, key: {3}, range"
": {4}, upload id: {5}, part_number: {6}, headers: {7}".format(source_bucket_name,
to_string(source_key),self.bucket_name,to_string(target_key),
byte_range, target_upload_id,target_part_number, headers))
if params is None:
params = dict()
params['uploadId'] = target_upload_id
params['partNumber'] = str(target_part_number)
resp = self.__do_object('PUT', target_key,
params=params,headers=headers)
logger.debug("Upload part copy done, req_id: {0}, status_code: {1}".format(resp.request_id, resp.status))
return PutObjectResult(resp)