In realtà ho implementato questa stessa funzione. Paperclip genera miniature per tutte le mie immagini e PDF e ho aggiunto icone miniatura personalizzate per file MS Word, Excel, HTML, TXT ecc.
La mia soluzione è abbastanza semplice. Nel mio modello Attachment
(nel tuo caso Asset
) ho definito il seguente metodo:
def thumbnail_uri(style = :original)
if style == :original || has_thumbnail?
attachment.s3.interface.get_link(attachment.s3_bucket.to_s, attachment.path(style), EXPIRES_AFTER)
else
generic_icon_path style
end
end
Ciò restituisce un URL di una miniatura memorizzati su S3, o un percorso locale per un'icona PNG generica sulla base degli attivi contenuti tipo (discusso di seguito). Il metodo has_thumbnail?
determina se questa risorsa ha o meno una miniatura generata per esso. Questo è qualcosa che ho aggiunto nel mio fork di Paperclip, ma puoi sostituirlo con la tua logica (non sono sicuro del modo "standard" per determinarlo, magari confrontando il percorso con il tuo percorso "mancante" definito, o anche basta confrontare il tipo di contenuto con un elenco predefinito ["immagine/jpeg", "immagine/png"] ecc.).
Ad ogni modo, ecco il metodo che passa di nuovo il percorso di un'icona generica in base sia lo stile delle miniature (nel tuo caso: pollice e: grande) e il tipo di contenuto:
# Generates a path to the thumbnail image for the given content type
# and image size.
#
# e.g. a :small thumbnail with a content type of text/html, the file name
# would have the filename icon.small.text.html.png
#
# If no such thumbnail can be found a generic one is returned
def generic_icon_path(style = image.default_style)
url = "/images/attachments/icon.#{style.to_s}.#{attachment_content_type.sub('/', '.')}.png"
if File.exists? "#{RAILS_ROOT}/public/#{url}"
url
else
"/images/attachments/icon.#{style.to_s}.default.png"
end
end
Poi, per aggiungere una nuova miniatura Aggiungo semplicemente i file PNG in /images/attachments/
con la convenzione del nome file corretta. Il mio stile thumbail si chiama: piccolo e mi hanno definito stili per Word, Excel e testo normale così in questo momento ho:
icon.small.application.msword.png
icon.small.text.plain.png
icon.small.application.vnd.ms-excel.png
icon.small.application.vnd.openxmlformats-officedocument.spreadsheetml.sheet.png
icon.small.application.vnd.openxmlformats-officedocument.wordprocessingml.document.png
Se il tipo di contenuto non è supportato, c'è un generico 'fermo tutto' icona che viene visualizzata:
icon.small.default.png
Impressionante! Molte grazie. Lo proverò per prima cosa domani mattina. Sembra esattamente quello che stavo cercando di fare. – Chelsea
Grazie ancora, ha funzionato bene in circa 10 minuti. Apprezzo davvero l'aiuto. – Chelsea
Prego! – Olly