使用Ruby在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 

但我没有在新的sdk中看到任何移动或重命名的内容。

在Amazon S3 SDK中没有重命名的function。 基本上你要做的就是复制对象,然后删除旧对象。

  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") 

在AWS-SDK中,版本2现在是名为“move_to”的方法( http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#move_to-instance_method ),您可以在这种情况下使用它。 从技术上讲,它仍然会在S3上复制和删除该文件,但您不需要手动复制和删除它,最重要的是,如果该复制操作因某种原因失败,它将不会删除该文件。

你有Rails Paperclip S3重命名成千上万的文件? 或https://gist.github.com/ericskiff/769191 ?