2010-11-29 158 views
14

使用导轨与回形针,我可以使用下面的一个before_create期间获得的文件名:轨道 - 回形针文件名

延长= File.extname(photo_file_name).downcase

如何得到公正的文件名..现在我有photo_file_name提供整个文件,titlename.pdf

我只需要TITLENAME没有.PDF

感谢

更新与代码:

photo.rb:

before_create :obfuscate_file_name 

    #Paperclip for photo 
    has_attached_file :photo, 
...... 


private 

    def obfuscate_file_name 
    extension = File.extname(photo_file_name).downcase 
    fileNameOnly = File.basename(photo_file_name).downcase 
    self.photo.instance_write(:file_name, "#{fileNameOnly}_#{ActiveSupport::SecureRandom.hex(32)}#{extension}") 
    end 

回答

22

使用File.basename使用可选suffix说法是这样的:

file_name = File.basename(photo_file_name, File.extname(photo_file_name)); 

作品在我的机器上:

alt text

+0

试过了,它不起作用..我会用上面的代码更新。 – AnApprentice 2010-11-29 18:25:53

+0

这样做。感谢Jacob。 – AnApprentice 2010-11-29 18:29:37

18

回形针附件具有“original_filename”方法。

0

另一个选项设置为默认值,适用于所有上传。

这个例子改名文件的名字默认“的网页,例如:test áé.jpgtest_ae_www.foo.com.jpg

帮手/ application_helper.rb

def sanitize_filename(filename) 
    fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m 
    fn[0] = fn[0].parameterize 
    return fn.join '.' 
end 

创建配置/初始化/ paperclip_defaults.rb

include ApplicationHelper 

Paperclip::Attachment.default_options.update({ 
    :path => ":rails_root/public/system/:class/:attachment/:id/:style/:parameterize_file_name", 
    :url => "/system/:class/:attachment/:id/:style/:parameterize_file_name", 
}) 

Paperclip.interpolates :parameterize_file_name do |attachment, style| 
    "#{sanitize_filename(attachment.original_filename)}_www.foo.com" 
end 

需要r estart,把这个代码后

我希望它有帮助! ;)