2011-12-20 15 views
7

Sto utilizzando CarrierWave per caricare i miei file in Rails 3.1 e sto cercando un modo per risparmiare spazio sul server. Molte delle foto caricate sono più alte di 20 MB, quindi dopo averle ridotte a 1024 x 1024, vorrei rimuovere l'originale. C'è un modo semplice per farlo nella classe uploader?Come posso fare in modo che carrierwave non salvi il file originale dopo l'elaborazione delle versioni?

Grazie, --mark

+0

fatto il mio lavoro soluzione per voi? – Lichtamberg

risposta

3

Si potrebbe definire un callback after_save in voi modellare ed eliminare la foto ..

non so il tuo modello, ma qualcosa di simile può funzionare se si personalizza esso:

class User << ActiveRecord::Base 

    after_create :convert_file 
    after_create :delete_original_file 

    def convert_file 
    # do the things you have to do 
    end 

    def delete_original_file 
    File.delete self.original_file_path if File.exists? self.original_file_path 
    end 
end 
+0

potresti fornire qualche esempio di lavoro? –

+0

Aggiunto un esempio – Lichtamberg

+0

Ha funzionato per te? Se sì, sarebbe bello se contrassegni la mia risposta chiedi corretto. – Lichtamberg

1
class FileUploader < CarrierWave::Uploader::Base 

    after :store, :delete_original_file 

    def delete_original_file(new_file) 
    File.delete path if version_name.blank? 
    end 

    include CarrierWave::RMagick 

    storage :file 
    . 
    . # other configurations 

end 
22

ho usato per avere due versioni e realizzato che non avevo bisogno, non l'originale

Così, invece di avere

version :thumb do 
    process :resize_to_limit => [50, 50] 
    end 

version :normal do 
    process :resize_to_limit => [300,300] 
end 

ho rimosso: normale e ha aggiunto questa

process :resize_to_limit => [300, 300] 

Ora l'originale viene salvato in formato ho bisogno e non ho una terza immagine inutilizzato sul server

+1

fantastico, penso che questa sia un'ottima soluzione per fare solo un processo al di fuori di qualsiasi blocco di versione in modo da non salvare affatto la versione originale se è veramente grande. grazie – FireDragon

+1

Vorrei aggiungere che se vuoi comunque includere '" normal_ "' nel nome file del file caricato, come accadrebbe in un blocco 'version', puoi assegnare esplicitamente un nome di versione all'uploader di base usando 'version_names <<: medium'. –

7

tutti! La soluzione selezionata non funziona per me. La mia soluzione:

after :store, :remove_original_file 

    def remove_original_file(p) 
    if self.version_name.nil? 
     self.file.delete if self.file.exists? 
    end 
    end 
+1

Grazie, ti meriti un biscotto! –

0

E 'un po' mod ma ha vantaggio prestazionale

my_uploader.send :store_versions!, open(my_file) 
Problemi correlati