使用Ruby在S3中重命名对象

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上复制和删除该文件,但您不需要手动复制和删除它,最重要的是,如果该复制操作因某种原因失败,它将不会删除该文件.


gum*_*lym 5

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)