aws-s3 文档说:
# Copying an object
S3Object.copy 'headshot.jpg', 'headshot2.jpg', 'photos'
但是例如我如何heashot.jpg
从photos
存储桶复制到存储archive
桶
谢谢!
德布
aws-s3 文档说:
# Copying an object
S3Object.copy 'headshot.jpg', 'headshot2.jpg', 'photos'
但是例如我如何heashot.jpg
从photos
存储桶复制到存储archive
桶
谢谢!
德布
AWS 开发工具包 gem。 S3Object#copy_to
Copies data from the current object to another object in S3.
S3 handles the copy so the client does not need to fetch the
data and upload it again. You can also change the storage
class and metadata of the object when copying.
它使用copy_object方法internal,因此复制功能允许您在 S3 存储桶内或之间复制对象,并可选择替换与该过程中的对象关联的元数据。
标准方法(下载/上传)
复制方法
代码示例:
require 'aws-sdk'
AWS.config(
:access_key_id => '***',
:secret_access_key => '***',
:max_retries => 10
)
file = 'test_file.rb'
bucket_0 = {:name => 'bucket_from', :endpoint => 's3-eu-west-1.amazonaws.com'}
bucket_1 = {:name => 'bucket_to', :endpoint => 's3.amazonaws.com'}
s3_interface_from = AWS::S3.new(:s3_endpoint => bucket_0[:endpoint])
bucket_from = s3_interface_from.buckets[bucket_0[:name]]
bucket_from.objects[file].write(open(file))
s3_interface_to = AWS::S3.new(:s3_endpoint => bucket_1[:endpoint])
bucket_to = s3_interface_to.buckets[bucket_1[:name]]
bucket_to.objects[file].copy_from(file, {:bucket => bucket_from})
使用right_aws
宝石:
# With s3 being an S3 object acquired via S3Interface.new
# Copies key1 from bucket b1 to key1_copy in bucket b2:
s3.copy('b1', 'key1', 'b2', 'key1_copy')
我遇到的问题是,如果你有pics/1234/yourfile.jpg
is bucket
onlypics
和 the key
is1234/yourfile.jpg
我从这里得到了答案:如何使用 Rails 应用程序中的 s3 在存储桶之间复制文件?
使用 AWS SDK gem 的 copy_from 或 copy_to 时,默认情况下不会复制三项内容:ACL、存储类或服务器端加密。您需要将它们指定为选项。
from_object.copy_to from_object.key, {:bucket => 'new-bucket-name', :acl => :public_read}
https://github.com/aws/aws-sdk-ruby/blob/master/lib/aws/s3/s3_object.rb#L904
对于仍在寻找的任何人,AWS 都有这方面的文档。aws-sdk
gem实际上非常简单:
bucket = Aws::S3::Bucket.new('source-bucket')
object = bucket.object('source-key')
object.copy_to(bucket: 'target-bucket', key: 'target-key')
使用 gem 可以轻松复制多个图像aws-sdk
,如下所示:
require 'aws-sdk'
image_names = ['one.jpg', 'two.jpg', 'three.jpg', 'four.jpg', 'five.png', 'six.jpg']
Aws.config.update({
region: "destination_region",
credentials: Aws::Credentials.new('AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY')
})
image_names.each do |img|
s3 = Aws::S3::Client.new()
resp = s3.copy_object({
bucket: "destinationation_bucket_name",
copy_source: URI.encode_www_form_component("/source_bucket_name/path/to/#{img}"),
key: "path/where/to/save/#{img}"
})
end
如果图像过多,建议将复制过程置于后台作业中。
这是一个简单的 ruby 类,用于将所有对象从一个存储桶复制到另一个存储桶:https ://gist.github.com/edwardsharp/d501af263728eceb361ebba80d7fe324
aws-s3 gem 无法在不将文件移动到本地计算机的情况下在存储桶之间复制文件。如果这对您来说是可以接受的,那么以下将起作用:
AWS::S3::S3Object.store 'dest-key', open('http://url/to/source.file'), 'dest-bucket'
我遇到了与您相同的问题,因此我克隆了 AWS-S3 的源代码并创建了一个分支,该分支具有copy_to
允许在存储桶之间复制的方法,我一直将其捆绑到我的项目中并在需要时使用功能。希望其他人也会发现这也很有用。