回形针,如何在文件末尾附加一个随机标记?

时间:2011-08-21 04:58:07

标签: ruby-on-rails ruby-on-rails-3 paperclip

我正在使用paperclip和我的rails 3 app。我想附加一个随机字符串,没有什么可以在文件的末尾长或疯狂缓存CDN。有人知道一个真正简单的方法吗?

以下是我目前的情况:

  has_attached_file :photo,
    :styles => { :thumb => "70x70>" },
    :storage => :s3,
    :s3_credentials => "#{Rails.root}/config/s3.yml",
    :path => "/:rails_env/public/users/:id/:style/:basename.:extension",
    .....

我想要一个像FILENAME_31313.png

这样的文件名

每次保存照片时,31313都是随机的。

谢谢

2 个答案:

答案 0 :(得分:5)

Paperclip(现在?)支持开箱即用:

has_attached_file :avatar,
    :styles => { :medium => "300x300>", :thumb => "100x100>"},
    :url => "/system/:id_partition/:style/:hash.:extension",
    :hash_secret => Test2::Application.config.secret_token

这样,图像存储在/system/000/000/006/thumb/1c4fef2bf61f39193f8606521e880cbde54e04a1.jpg。不过不短。使用:basename,您可以将基本名称添加到网址。有关详细信息,请参阅https://github.com/thoughtbot/paperclip#uri-obfuscation

答案 1 :(得分:4)

你可以使用这样的东西来完成工作:

before_create :generate_random_hex

private
def generate_random_hex
  self.random_hex = ActiveSupport::SecureRandom.hex(8)
end

Paperclip.interpolates :random_hex do |attachment, style|
  attachment.instance.random_hex
end

然后修改您的回形针设置:

has_attached_file :photo,
  :styles => { :thumb => "70x70>" },
  :storage => :s3,
  :s3_credentials => "#{Rails.root}/config/s3.yml",
  :path => "/:rails_env/public/users/:id/:style/:basename_:random_hex.:extension",