Paperclip renaming files after they're saved

前端 未结 9 1450
情书的邮戳
情书的邮戳 2020-12-07 23:34

How do I rename a file after is has been uploaded and saved? My problem is that I need to parse information about the files automatically in order to come up with the file

9条回答
  •  执笔经年
    2020-12-08 00:05

    My avatar images are named with the user slug, if they change their names I have to rename images too.

    That's how I rename my avatar images using S3 and paperclip.

    class User < ActiveRecord::Base
      after_update :rename_attached_files_if_needed
    
      has_attached_file :avatar_image,
        :storage        => :s3,
        :s3_credentials => "#{Rails.root}/config/s3.yml",
        :path           => "/users/:id/:style/:slug.:extension",
        :default_url    => "/images/users_default.gif",
        :styles         => { mini: "50x50>", normal: "100x100>", bigger: "150x150>" }
    
      def slug
        return name.parameterize if name
        "unknown"
      end
    
    
      def rename_attached_files_if_needed
        return if !name_changed? || avatar_image_updated_at_changed?
        (avatar_image.styles.keys+[:original]).each do |style|
          extension = Paperclip::Interpolations.extension(self.avatar_image, style)
          old_path = "users/#{id}/#{style}/#{name_was.parameterize}#{extension}"
          new_path = "users/#{id}/#{style}/#{name.parameterize}#{extension}"
          avatar_image.s3_bucket.objects[old_path].move_to new_path, acl: :public_read
        end
      end
    end
    

提交回复
热议问题