我正在使用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都是随机的。
谢谢
答案 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",