Ответ 1
Используйте File.basename
с необязательным аргументом suffix
следующим образом:
file_name = File.basename(photo_file_name, File.extname(photo_file_name));
Работает на моей машине:
используя рельсы с помощью 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
Используйте File.basename
с необязательным аргументом suffix
следующим образом:
file_name = File.basename(photo_file_name, File.extname(photo_file_name));
Работает на моей машине:
Вложение для скрепки с надписями имеет для этого метод "original_filename".
user.logo.original_filename
=> 'test.jpg'
Другой параметр установлен на значение по умолчанию, работает для всей загрузки.
В этом примере измените файл имени на "имя по умолчанию" для сети, например: 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
Нужно перезапустить, после этого кода
Я надеюсь, что это поможет!;)