2010-11-29 6 views
14

utilizando los carriles con el Paperclip, que pueden utilizar estos procedimientos para obtener el nombre del archivo durante una before_create:rieles - Paperclip de nombre de archivo

extensión = File.extname (photo_file_name) .downcase

¿Cómo consigo sólo la nOMBRE DE aRCHIVO .. ahora mismo tengo photo_file_name que proporciona el archivo completo, titlename.pdf

necesito simplemente titlename sin el .pdf

Gracias

de actualización con código:

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 

Respuesta

22

Uso File.basename con el argumento opcional suffix así:

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

Funciona en mi máquina:

alt text

+0

intentado, que no funciona .. Voy a actualizar con el código de seguridad. – AnApprentice

+0

Eso lo hizo. Gracias Jacob. – AnApprentice

+1

@AnApprentice ¡De nada! :) –

18

Paperclip fijación tiene el método 'original_filename' para esto.

+1

No estoy seguro de que esto dará lo que quiere el OP. Quieren 'a_file', no' a_file.pdf'? – matsjoyce

+1

Parece que el título de esta pregunta quizás no sea lo suficientemente específico. La gente probablemente vienen aquí en busca de "nombre de archivo de un clip", y que esta respuesta es que es la respuesta correcta a esa pregunta, por lo que Upvote que a pesar de que no es lo que el PO de esta pregunta preguntó. –

0

Otra opción está configurada por defecto, funciona para todas las cargas.

Este ejemplo de archivo de cambio de nombre a 'default nombre' para la web, ejemplo: test áé.jpg a test_ae_www.foo.com.jpg

ayudante/application_helper.rb

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

Crear config/inicializadores/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 

Necesite r eanudación, después de poner este código

espero que ayude! ;)

Cuestiones relacionadas