2017-07-05 4 views
0

Ich verwende CarrierWave mit Nebel, um meine Bilder auf S3 hochzuladen.Dynamische Shop-Verzeichnisse für gleiche Modelle mit carrierwave

Ich habe Modell Bild, das Bilder von verschiedenen Größen darstellen kann und entsprechend in verschiedenen Ordner gespeichert werden muss.

Zum Beispiel für image.jpg ich zwei verschiedene uploaded Versionen haben könnte, die gespeichert werden müssen, wie:

'images/large/image.jpg' 
'images/small/image.jpg' 

Es beliebige Anzahl von Anwendungsfällen sein könnte und Versionen minimagick verwenden, können sie sich nicht auf alle.

Bis jetzt konnte ich keine Lösung finden. Weiß jemand, wie man das macht?

Antwort

0

Ich habe diese Frage gesehen ein paar Mal gefragt, so werde ich schreiben, was meine endgültige Lösung ist.

Anstatt mount_uploader auf Modell zu definieren, entschied ich mich, Uploader unabhängig zu verwenden und Urls zu Aufzeichnungen später zu speichern.

dynamisch ändernden store_dir und Dateiname kann wie dieser Mit diesem Ansatz

uploader = Uploader.new 

uploader.define_singleton_method(:store_dir) do 
    'new_store_dir' 
end 
uploader.define_singleton_method(:filename) do 
    'new_filename' 
end 

uploader.store!(image) 

erreicht werden, können Sie auch die Namen, mit lokalen Variablen definieren oder was auch immer Sie in der Steuerung zur Verfügung hat.

Hoffentlich hilft es auch jemand anderen.

0

, um in dem hochgeladene Datei zu ändern ist, setzt, außer Kraft setzt nur die store_dir Methode :, für Ihren Fall (reference link)

class Image < CarrierWave::Uploader::Base 
storage :file 
    # this if you using use condition for folder location 
    def store_dir 
    if model.somefield == "somecondition 
     "uploads/#{model.somefield}" 
    elsif model.somefield == "somecondition 
     "uploads/location2" 
    else 
     "uploads/default_dir" 
    end 

    end 
    # this is if you want to use version_name 
    def store_dir 
    'images/#{version_name}/' 
    end 
end 
+0

Ich muss in der Lage sein, für jedes Bild ein anderes Verzeichnis anzugeben, daher wird version_name nicht funktionieren. Ich muss 3-4 verschiedene Store-Dirs haben und wählen, in welchem ​​zu speichern, je nachdem, welches Dateifeld verwendet wurde, ist das möglich? – IvanV

+0

können Sie logisch verwenden, wenn innerhalb von store_dir, nur meine Antwort bearbeiten – widjajayd

Verwandte Themen