paperclip を使っていて画像を S3 に 保存しているとします。

そのとき、S3 上のファイルを別のパスにコピーしたい事例があったので、そのときのやり方をメモっておきます。出来てしまえばいたって簡単なんですが、頻繁にやる作業でもないので結局調べることになってしまう。。><

例えば User の画像を path/to/#{filename} から path/to/new/#{filename} にコピーするなら

require 'aws-sdk'

AWS.config(
  access_key_id: YOUR_ACCESS_KEY_ID,
  secret_access_key: YOUR_SECRET_ACCESS_KEY
)

s3 = AWS::S3.new
User.all.each do |user|
  p user.id
  filename = user.photo_file_name
  bucket_name = 'sasata299-bucket'
  obj1 = s3.buckets[bucket_name].objects["path/to/#{filename}"]
  obj2 = s3.buckets[bucket_name].objects["path/to/new/#{filename}"]
  obj1.copy_to obj2
end

こんな感じです。 :)

詳しくはこの辺にまとまってます〜 Class: AWS::S3::S3Object
このエントリーをはてなブックマークに追加