Rails Paperclip S3如何批量重命名数千个文件?

4

我试图在S3中重命名许多文件,将当前的Paperclip has_attached_file :pathstuff/:id_:updated_at_:style.:extension更改为stuff/:id_:counter_:style.:extension,其中:counter是与图像相同模型中的字段。

我不知道如何重命名所有文件 - 最好是在rake任务中。

顺便说一下,每次保存新文件到记录时,我都会递增:counter

这是Rails 3和此帖子发布时的最新Paperclip。

有什么想法吗?

谢谢!


我正在使用aws-s3 gem解决方案直接编辑S3存储桶的问题。一旦我验证它有效,我将在下面发布答案...但我认为它会有效。:) - wulftone
2个回答

5
这是我的解决方案:
# This task changes all of the keys from the current format,
# :id_:image_updated_at_:style, to :id_:image_counter_:style.
# :image_counter is set arbitrarily at 1, since all records have
# a default of 1 in that field (until they're updated).
desc "One-time renaming of all the amazon s3 content for User.image"

task :rename_s3_files, [:bucket] => :environment do |t, args|
  require 'aws/s3'

  cred = YAML.load(File.open("#{Rails.root}/config/s3.yml")).symbolize_keys!
  AWS::S3::Base.establish_connection! cred

  bucket = AWS::S3::Bucket.find(args[:bucket])

  # Rename everything in the bucket, taking out the timestamp and replacing it with "1"
  bucket.each do |obj|
    arr = obj.key.split('_')
    obj.rename(arr[0] + '_1_' + arr[2])
  end

end

它只是遍历存储桶中的所有文件,并根据这个新方案将它们重命名。我在Paperclip路径中将:counter字段默认设置为1,因此在新文件名中出现了_1_

非常顺利!


1

我不确定这会不会起作用 - 我需要重命名原始文件,而不是缩略图。如果我将:path选项更改为所需格式,它当然不会再看到文件,因此它将无法使用重新处理来重命名它们。 - wulftone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接