2010-07-10 8 views
24

Come posso dire a Paperclip di non salvare il file originale quando viene caricato? O ancora meglio, per memorizzare una versione in scala del file come originale?Come posso dire a paperclip di non salvare il file originale?

+0

Controlla la mia risposta [qui] (http://stackoverflow.com/questions/25467130/rails-4-and-paperclip-stop-the-original-style-file-upload-to -copy-it-from-an/25585186) – laertiades

risposta

43

Credo che si può semplicemente definire uno stile per: originale per avere graffetta sostituire l'originale con quella dimensione.

:styles => { :original => '300x168>', :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, ...} 
+0

Fantastico. Grazie, Chris. Non posso credere di averlo trascurato. – Jade

+0

bella soluzione !! – flunder

+0

Hai provato? Funziona? – Hamdan

0

Paperclip salva sempre un originale per impostazione predefinita, ma "credo" che, se lo rimuovi dalla migrazione, non tenterà di salvarlo.

Ho salvato un originale ridimensionato sul mio modello in modo che gli utenti possano modificare l'immagine in un secondo momento. Il mio modello è simile al seguente:

:styles => { :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, :resized_thumb => {:geometry => "115x70>"}, :deal => {:geometry => "64x56#"}, 
:cropped_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}#", :jcrop => true}, 
:resized_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}>"}, 

:orig => '300x168>', #this is the scaled original that I call later 


:cropped_orig => {:geometry => '300x168#', :jcrop => true}, 
:resized_orig => {:geometry => '300x168>'} }, 
:processors => [:jcropper] 
+0

Grazie per la tua risposta, Trip. – Jade

4

La soluzione di Cris G può essere piacevole nei casi più semplici ma presenta delle limitazioni. considera che: stile: processo Paperclip originale prima di tutti gli altri, quindi dopo quello aggiornato: l'immagine originale (molto più piccola ora) sarà la fonte per la successiva elaborazione. Quindi sei costretto a mantenere: lo stile originale con la risoluzione migliore. La situazione peggiora in quanto è necessario ritagliare le immagini con il processore: questa è la situazione in cui hai davvero bisogno di una vera qualità originale.)

Quindi ti consiglierei un po 'prima (bisogno di trovare il modo di ottenere ogni allegati del modello) Soluzione:

after_save :reprocess_attach 

private 

def reprocess_attach 
    if self.<atch_name>.present? && Pathname.new(self.<atch_name>.path).exist? 
     self.<atch_name>.save 
     File.unlink(self.<atch_name>.path) 
    end 
end 

che non si preoccupa di quello che l'elaborazione era dietro il palco. Uccide semplicemente il file originale)

+0

Hai assolutamente ragione, ignorando la geometria di: l'originale influisce sull'elaborazione di tutti gli altri. Ma potresti spiegare la tua soluzione per impedire che l'originale venga caricato più dettagliatamente, per favore, sono confuso! Grazie! – Sujimichi

+0

@Sujimichi bene, dopo il salvataggio, il "reprocess_attach" controlla se l'allegato esiste come file originale. Se lo fa, si assicura che tutti i file vengano scaricati nel filesystem (salvataggio) e dopo che cancella il file originale. –

Problemi correlati