J'ai implémenté cette même fonctionnalité. Paperclip génère des vignettes pour toutes mes images et PDF, et j'ai ajouté des icônes de miniatures personnalisées pour les fichiers MS Word, Excel, HTML, TXT, etc.
Ma solution est assez simple. Dans mon modèle Attachment
(dans votre cas Asset
) J'ai défini la méthode suivante:
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
Cela renvoie une URL à une vignette stockée sur S3, ou un chemin local vers une icône PNG générique sur la base des actifs de contenu type (discuté ci-dessous). La méthode has_thumbnail?
détermine si une miniature a été générée pour cet élément. C'est quelque chose que j'ai ajouté dans ma propre fourche de Paperclip, mais vous pouvez le remplacer dans votre propre logique (je ne suis pas sûr de la façon «standard» de le déterminer, peut-être comparer le chemin avec votre chemin juste en comparant le type de contenu à une liste par défaut ["image/jpeg", "image/png"] etc).
Quoi qu'il en soit, voici la méthode qui passe en arrière un chemin vers une icône générique basée à la fois sur le style des vignettes (dans votre cas: le pouce et un grand) et le type de contenu:
# 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
Ensuite, ajouter une nouvelle vignette Je viens d'ajouter des fichiers PNG dans /images/attachments/
avec la convention de nom de fichier correcte. Mon style en vignette est appelé: petit et j'ai défini des styles pour Word, Excel et texte brut donc à l'heure actuelle je:
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
Si le type de contenu ne sont pas pris en charge, il y a un générique « fourre-tout » icône qui est affichée:
icon.small.default.png
Impressionnant! Merci beaucoup. Je vais essayer cela dès le matin. On dirait exactement ce que j'essayais de faire. – Chelsea
Merci encore, cela s'est bien passé dans environ 10 minutes. Vraiment apprécier l'aide. – Chelsea
De rien! – Olly