Umbenennen hochgeladener Dateien mit Carrierwave
Ich bin mit Carrierwave Dateien hochladen, und ich es funktioniert haben.
Mein Problem ist der Versuch zu ändern, den Namen der hochgeladenen Datei.
In der generierten uploader.rb gibt es eine Methode, die ich denke, ich sollte mit
def filename
"something.jpg" if original_filename
basename = "what"+orginal_filename if original_filename, works
basename = (0...8).map{65.+(rand(25)).chr}.join if original_filename # will create a random name for each version, e.g. the orginal, the thumb, and the filename in the db, useless
end
Ich kann nicht scheinen, um den Zugriff auf Elemente wie 'Erweiterung' oder 'content_type' in sanitized_file.rb, so ist dies ein bisschen über meine aktuellen skill-level jetzt.
Anregungen und übungen, dies zu tun, d.h. Sie erzeugen Dateinamen für eine Datei hochgeladen, die so gut funktioniert wie die carrierwave Standard (nichts tun, aber trägt auf jeder version)? Wie es scheint, einfach genug sein sollte, aber ich habe stolperte über dieses.
InformationsquelleAutor der Frage waving | 2010-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ein anderes problem mit Ihren zufälligen Dateinamen-generator ist, dass es möglich ist, Kollisionen, nicht wahr? Sie könnte möglicherweise generieren einen Dateinamen, der erzeugt wurde.
Eine Möglichkeit, darüber zu gehen, wäre es irgendwie generieren einen hash basierend auf den einzigartigen Eigenschaften des Bildes, wie der Datei-Pfad. Ein Beispiel aus der carrierwave Gruppe:
Dadurch wird ein MD5-hash basierend auf den aktuellen Pfad, und fügen Sie die ursprüngliche Datei mit der Erweiterung.
Edit: Die carrierwave wiki Hinzugefügt Eintrag mit ein paar Methoden, wie Sie einen zufälligen und eindeutigen Dateinamen für alle versionierten Dateien.
InformationsquelleAutor der Antwort Jack Chu
Haben ein echtes Unikat mit dem Namen (nicht fast einmalig ist) ich empfehle die Verwendung der uuid gem.
im Gemfile hinzufügen:
in file_uploader.rb:
InformationsquelleAutor der Antwort ramigg
Aus der Google-Gruppe:
InformationsquelleAutor der Antwort bouchard
Nur damit die Platte.id-Präfix das Dateinamen können Sie Folgendes tun:
InformationsquelleAutor der Antwort T.N.T.
Die andere Lösung, sieht gut aus, aber wie ich es dann geschafft haben war einen hook erstellt, die eine zufällige Zeichenfolge, für die ein neuer name auf der Instanz-Erstellung, dann:
in den uploader.
Arbeitete, indem die zufällige Generierung von Namen als Teil des Modells, dann mit carrierwave verwenden.
Ich bin neugierig, was ist schneller, effektiver, angemessener, sound, etc.
InformationsquelleAutor der Antwort blueblank
Hier ist die Lösung, so ändern Sie den Namen der Datei, wenn
store_dir
enthält bereits die Datei mit der genauen Namen:Hinweis:
Rails.root.join("documents/")
ist definiert als meinestore_dir
.Hoffe, es hilft jemand.
InformationsquelleAutor der Antwort mArtinko5MB