Merge pull request #110 from kouk/multipart-copy
support x-amz-copy-source in multipart uploads
This commit is contained in:
commit
2cd5418ffa
@ -182,6 +182,14 @@ class S3Backend(BaseBackend):
|
||||
multipart = bucket.multiparts[multipart_id]
|
||||
return multipart.set_part(part_id, value)
|
||||
|
||||
def copy_part(self, dest_bucket_name, multipart_id, part_id,
|
||||
src_bucket_name, src_key_name):
|
||||
src_key_name = clean_key_name(src_key_name)
|
||||
src_bucket = self.buckets[src_bucket_name]
|
||||
dest_bucket = self.buckets[dest_bucket_name]
|
||||
multipart = dest_bucket.multiparts[multipart_id]
|
||||
return multipart.set_part(part_id, src_bucket.keys[src_key_name].value)
|
||||
|
||||
def prefix_query(self, bucket, prefix, delimiter):
|
||||
key_results = set()
|
||||
folder_results = set()
|
||||
|
@ -160,13 +160,23 @@ class ResponseObject(object):
|
||||
else:
|
||||
return 404, headers, ""
|
||||
if method == 'PUT':
|
||||
if 'uploadId' in query and 'partNumber' in query and body:
|
||||
if 'uploadId' in query and 'partNumber' in query:
|
||||
upload_id = query['uploadId'][0]
|
||||
part_number = int(query['partNumber'][0])
|
||||
key = self.backend.set_part(bucket_name, upload_id, part_number, body)
|
||||
template = Template(S3_MULTIPART_UPLOAD_RESPONSE)
|
||||
if 'x-amz-copy-source' in request.headers:
|
||||
src = request.headers.get("x-amz-copy-source")
|
||||
src_bucket, src_key = src.split("/", 1)
|
||||
key = self.backend.copy_part(
|
||||
bucket_name, upload_id, part_number, src_bucket,
|
||||
src_key)
|
||||
template = Template(S3_MULTIPART_UPLOAD_RESPONSE)
|
||||
response = template.render(part=key)
|
||||
else:
|
||||
key = self.backend.set_part(
|
||||
bucket_name, upload_id, part_number, body)
|
||||
response = ""
|
||||
headers.update(key.response_dict)
|
||||
return 200, headers, template.render(part=key)
|
||||
return 200, headers, response
|
||||
|
||||
if 'x-amz-copy-source' in request.headers:
|
||||
# Copy key
|
||||
|
Loading…
Reference in New Issue
Block a user