复制对象

copy_object 操作用于创建一个已经在媒体存储中的对象。使用 copy_object 可以拷贝单个最大为5GB的对象,如果需要拷贝更大的对象,可以使用 upload_part_copy 操作。执行 copy_object 操作,必须具有对被拷贝对象的READ权限和对目标bucket的WRITE权限。

拷贝生成的对象默认保留原对象的元数据信息,也可以在 copy_object 操作中指定新的元数据。但是拷贝生成的对象不会保留原来的ACL信息,该对象默认是发起 copy_object 操作的用户私有的。

以下代码展示如何复制一个对象:

def copy_object(client, src_bucket, src_obj_key, dest_bucket, dest_obj_key)
  client.copy_object(
    bucket: dest_bucket,
    copy_source: "/#{src_bucket}/#{src_obj_key}",
    key: dest_obj_key
  )
  puts 'Object copied.'
rescue StandardError => e
  puts "Error copying objects: #{e.message}"
end

copy_object可设置的部分参数如下:

参数 类型 说明 是否必要
acl String 拷贝后对象的预定义的标准ACL信息,例如private,public-read,public-read-write等。
bucket String 存放拷贝生成对象的桶名称。
copy_source String URL格式的拷贝对象数据来源,包含了桶名称和对象key的信息,二者之间使用正斜杆(/)分割,versionId可选参数用于指定原对象的版本。例如,“foo/boo?versionId=11111"表示拷贝foo桶中的boo对象,其版本id为11111。如果不指定versionId参数,则默认拷贝当前版本的对象数据。
grant_full_control String 用于为用户配置被拷贝对象的FULL_CONTROL权限信息。
grant_read String 用于为用户配置被拷贝对象的READ权限信息。
grant_read_acp String 用于为用户配置被拷贝对象的READ_ACP权限信息。
grant_write_acp String 用于为用户配置被拷贝对象的WRITE_ACP权限信息。
key String 拷贝生成对象对应的key。
metadata Hash<String,String> 拷贝生成对象的元数据信息。
metadata_directive String 指定拷贝生成的对象的元数据信息来自被拷贝对象,还是来自请求中附带的信息。