Рельсы - имя файла скрепки

используя рельсы с помощью Paperclip, я могу использовать следующее, чтобы получить имя файла во время before_create:

extension = File.extname(photo_file_name).downcase

Как получить JUST имя файла.. Прямо сейчас у меня есть имя_файла_файла, который предоставляет весь файл, 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

Ответы

Ответ 1

Используйте File.basename с необязательным аргументом suffix следующим образом:

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

Работает на моей машине:

alt text

Ответ 2

Вложение для скрепки с надписями имеет для этого метод "original_filename".

Ответ 3

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

Ответ 4

Другой параметр установлен на значение по умолчанию, работает для всей загрузки.

В этом примере измените файл имени на "имя по умолчанию" для сети, например: test áé.jpg до test_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

Нужно перезапустить, после этого кода

Я надеюсь, что это поможет!;)