non*_*ame 4 ruby ruby-on-rails amazon-s3
我想使用Ruby sdk重命名s3中的项目.我该怎么做呢?
我试过了:
require 'aws-sdk'
s3 = AWS.config(
:region => 'region',
:access_key_id => 'key',
:secret_access_key => 'key'
)
b = AWS::S3::Bucket.new(client: s3, name: 'taxalli')
b.objects.each do |obj|
obj.rename_to('imports/files/' + line.split(' ').last.split('/').last)
end
Run Code Online (Sandbox Code Playgroud)
但我没有在新的sdk中看到任何移动或重命名的内容.
小智 12
在AWS-SDK中,版本2现在是名为"move_to"的方法(http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#move_to-instance_method),您可以在这种情况下使用它.从技术上讲,它仍然会在S3上复制和删除该文件,但您不需要手动复制和删除它,最重要的是,如果该复制操作因某种原因失败,它将不会删除该文件.
Amazon S3 SDK 中没有重命名之类的东西。基本上,您要做的就是复制对象,然后删除旧对象。
require 'aws-sdk'
require 'open-uri'
creds = Aws::SharedCredentials.new(profile_name: 'my_profile')
s3 = Aws::S3::Client.new( region: 'us-east-1',
credentials: creds)
s3.copy_object(bucket: "my_bucket",
copy_source: URI::encode("my_bucket/MyBookName.pdf"),
key: "my_new_book_name.pdf")
s3.delete_object(bucket: "my_bucket",
key: "MyBookName.pdf")
Run Code Online (Sandbox Code Playgroud)