def copy_from source, options = {}
options = options.dup
options[:copy_source] =
case source
when S3Object
"#{source.bucket.name}/#{source.key}"
when ObjectVersion
options[:version_id] = source.version_id
"#{source.object.bucket.name}/#{source.object.key}"
else
if options[:bucket]
"#{options.delete(:bucket).name}/#{source}"
elsif options[:bucket_name]
"#{options.delete(:bucket_name)}/#{source}"
else
"#{self.bucket.name}/#{source}"
end
end
if [:metadata, :content_disposition, :content_type, :cache_control,
].any? {|opt| options.key?(opt) }
then
options[:metadata_directive] = 'REPLACE'
else
options[:metadata_directive] ||= 'COPY'
end
if options.delete(:client_side_encrypted)
copy_cse_materials(source, options)
end
add_sse_options(options)
options[:storage_class] = options.delete(:reduced_redundancy) ?
'REDUCED_REDUNDANCY' : 'STANDARD'
options[:bucket_name] = bucket.name
options[:key] = key
if use_multipart_copy?(options)
multipart_copy(options)
else
resp = client.copy_object(options)
end
nil
end