rails - Paperclip文件名

时间:2010-11-29 18:21:39

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

使用带有Paperclip的rails,我可以使用以下命令在before_create期间获取文件名:

extension = File.extname(photo_file_name).downcase

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

我只需要没有.pdf的titlename

由于

使用代码进行更新:

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

4 个答案:

答案 0 :(得分:23)

File.basename与可选的suffix参数一起使用,如下所示:

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

在我的机器上运行:

alt text

答案 1 :(得分:22)

Paperclip附件具有' original_filename'方法。

答案 2 :(得分:8)

user.logo.original_filename
  => 'test.jpg'

答案 3 :(得分:0)

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

此示例将名称文件更改为' name default'对于网络,例如: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

创建 config / initializers / 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

在放入此代码后需要重启

我希望它有所帮助! ;)