2010-02-17 14 views
8

Paperclip per impostazione predefinita tenta di elaborare ogni file di immagine per generare una miniatura. Ma prova anche a farlo con i file pdf, che può essere un'attività che richiede molto tempo. Ho provato a cercare su google e ho trovato una soluzione, ma cambia i metodi di Paperclip.Come disabilitare la postelaborazione per i file PDF in Paperclip?

Come disabilitare la post-elaborazione pdf in Paperclip senza modificare le fonti di Paperclip?

risposta

16

Dal mio attuale applicazione di produzione, simile al precedente, ma sembra in modo esplicito per le immagini (in questo caso il mio uploader accetta praticamente qualsiasi tipo di file, in modo da elaborare solo immagini e ignorare tutti gli altri):

before_post_process :is_image? 

def is_image? 
    ["image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif"].include?(self.asset_content_type) 
end 
+0

Ciao Toby, dove metti questo codice? Grazie. – sscirrus

+0

Nel modello, iirc –

2

Una soluzione è quella di utilizzare before_post_process callback:

# Model with has_attached_file 
before_post_process :forbid_pdf # should be placed after line with has_attached_file 

private 
def forbid_pdf 
    return false if (data_content_type =~ /application\/.*pdf/) 
end 

data_content_type dovrebbe essere cambiata a campo corrispondente nel modello.

Un'altra soluzione che mi è venuta in mente è creare un processore personalizzato per le immagini in cui dovremmo controllare il tipo di file e se non è pdf, esegui il processore standard Paperclip::Thumbnail.

0

si può risolvere con una sola linea:

before_post_process { avatar_content_type.match? %r{\Aimage\/.*\z} } 

non dimenticare di sostituire avatar con l'attributo (ad es .: receipt_content_type).

Problemi correlati