使用rake任务重命名回形针文件

时间:2018-04-14 15:40:31

标签: ruby-on-rails amazon-s3 paperclip file-rename

我已经在我的rails项目回形针中使用默认的

来上传一些图像
path: ":class/:attachment/:id_partition/:style/:filename"

所以所有文件都上传到亚马逊s3桶中。

现在我想/需要将文件名更改为

path: ':class/:id/:style/:hash.:extension'

这适用于新上传的文件,但不再找到现有文件。 所以我试图重新使用回形针rake刷新任务。 脚步:   - 使用旧路径加载所有附件,使用新路径保存,删除旧条目。 这是我到目前为止的结果:

desc "Move renamed files"
  task :move_renamed_files => :environment do
    klass = Paperclip::Task.obtain_class
    names = Paperclip::Task.obtain_attachments(klass)
    names.each do |name|
      Paperclip.each_instance_with_attachment(klass, name) do |instance|
        attachment = instance.send(name)
        if attachment.exists?
          print "."
        else
          # No hit on new location, trying old location
          org_path = attachment.options[:org_path]
          new_path = attachment.options[:path]
          attachment.options[:path] = org_path
          if attachment.exists?
            # Save file with new name
            puts "#{attachment.url}"
            attachment.options[:path] = new_path
            instance.save(:validate => false)
            # THIS DOES NOT WORK

            #if attachment.save
            #  puts "Save OK"
            #else
            # puts "Save failed"
            #end
          else
              Paperclip::Task.log_error("#{instance.class}##{attachment.name}, #{instance.id}, #{attachment.url}")
          end


        end
      end
    end

任何想法如何完成代码? 我绝对陷入其中。

2 个答案:

答案 0 :(得分:1)

我会潜入AWS :: S3库,因为你已经有了路径。如果你知道它有效,那么就这么做吧。

AWS::S3::S3Object.rename(old_name, new_name, 'bucket_name')

此外,这可能会有所帮助: http://blog.magmalabs.io/2015/11/25/rename-s3-assets-after-paperclip-hashing.html

答案 1 :(得分:0)

在这里创建了一个github工作项目:

https://github.com/tclaus/Rename-S3-assets-after-paperclip-hashing