AWS S3使用aws-sdk更改为bucket / prefix

时间:2012-10-12 19:26:30

标签: ruby-on-rails ruby amazon-s3 aws-sdk

我可以看到有一种方法可以使用以下方法更改集合的前缀:

objects = collection.with_prefix('a/').with_prefix('b/', :replace)
objects.prefix #=> 'b/'

问题:如何保存此更改?

http://rubydoc.info/github/amazonwebservices/aws-sdk-for-ruby/master/AWS/S3/ObjectCollection:with_prefix

2 个答案:

答案 0 :(得分:3)

您可以使用AWS :: S3 :: S3Object#move_to方法在S3中的“文件夹”之间移动对象。

bucket.objects.with_prefix('a/').each do |obj|
  obj.move_to(obj.key.sub(/^a/, 'b'))
end

:在AWS :: S3 :: ObjectCollection上附加和:追加参数#with_prefix控制#with_prefix如何构建在链接时用于过滤枚举对象的前缀的行为。以下的示例用法:append可能如下所示:

# enumerates objects inside folder1 / folder2
bucket.objects.with_prefix(folder1).with_prefix(folder2, :append).each do |obj|
end

当然,您可以通过在#with_prefix的单个调用中加入前缀来实现此目的:

# enumerate objects with the prefix 'abc/xyz/'
folder1 = 'abc/'
folder2 = 'xyz/'
bucket.objects.with_prefix("#{folder1}#{folder2}").each do |object|
end

答案 1 :(得分:0)

忽略我的回答,如果我没有明白你的观点?

您想要更改s3存储桶中存在的对象的前缀。 只有使用新前缀复制对象,然后删除旧的前缀,才能实现。