2010-11-29 9 views
14

mit Schienen mit Papierklammer, kann ich folgendes erhält die Dateinamen während eines before_create verwenden:Schienen - Paperclip Dateiname

extension = File.extname (photo_file_name) .downcase

Wie erhalte ich nur die Dateiname .. im Moment habe ich photo_file_name haben, die die gesamte Datei zur Verfügung stellt, titlename.pdf

ich brauche nur titlename ohne .pdf

Dank

Aktualisierung mit Code:

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 

Antwort

22

Verwenden File.basename mit dem optionalen suffix Argument wie folgt aus:

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

Arbeiten auf meiner Maschine:

alt text

+0

Ich habe versucht, dass es nicht funktioniert .. Ich werde mit dem obigen Code aktualisieren. – AnApprentice

+0

Das hat es getan. Danke Jacob. – AnApprentice

+1

@AnApprentice Sie sind herzlich willkommen! :) –

18

Paperclip-Anhang hat die Methode 'Original_Dateiname' dafür.

+1

Ich bin mir nicht sicher, dass das geben wird, was das OP will. Sie wollen 'a_file', nicht' a_file.pdf'? – matsjoyce

+1

Scheint, als wäre der Titel dieser Frage vielleicht nicht spezifisch genug. Die Leute kommen wahrscheinlich hierher, um nach "Büroklammerdateinamen" zu suchen, und finden diese Antwort, die die richtige Antwort auf diese Frage ist, also haben sie sie aufgewertet, obwohl es nicht das ist, was der OP von dieser Frage verlangt hat. –

0

Eine andere Option ist auf Standard eingestellt, funktioniert für alle Upload.

diesem Beispiel Name ändern Datei 'name default' für Web, Beispiel: test áé.jpg zu test_ae_www.foo.com.jpg

Helfer/application_helper.rb

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

erstellen 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 

Notwendigkeit r estart, nach diesem Code

Ich hoffe, es hilft! ;)