рельсы - имя файла скрепки - PullRequest
15 голосов
/ 29 ноября 2010

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

extension = File.extname (photo_file_name) .downcase

Как мне получить просто файлимя .. Прямо сейчас у меня есть photo_file_name, которое предоставляет весь файл, titlename.pdf

мне нужно просто имя заголовка без .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

Ответы [ 4 ]

23 голосов
/ 29 ноября 2010

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

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

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

alt text

22 голосов
/ 19 октября 2014

Для прикрепления скрепки есть метод 'original_filename'.

8 голосов
/ 19 января 2016
user.logo.original_filename
  => 'test.jpg'
0 голосов
/ 08 марта 2017

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

В этом примере изменение имени файла на «имя по умолчанию» для сети, например: 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

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

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

...