W rzeczywistości zaimplementowałem tę samą funkcję. Paperclip generuje miniatury wszystkich moich obrazów i plików PDF, a także dodałem niestandardowe ikony miniatur dla plików MS Word, Excel, HTML, TXT itp.
Moje rozwiązanie jest dość proste. W moim modelu Attachment
(w przypadku Asset
) Mam zdefiniowane w następujący sposób:
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
ta zwraca albo adres URL do miniatury przechowywanych na S3 lub lokalnej drodze do ogólnej ikony PNG w oparciu o aktywa treści typ (omówiony poniżej). Metoda has_thumbnail?
określa, czy do tego zasobu został wygenerowany miniatura. To jest coś, co dodałem w moim własnym rozwidleniu Paperclip, ale możesz go zastąpić w swojej własnej logice (nie jestem pewien "standardowej" metody, aby to ustalić, być może porównując ścieżkę ze zdefiniowaną "brakującą" ścieżką, lub nawet po prostu porównując typ zawartości z domyślną listą ["image/jpeg", "image/png"] itd.).
Zresztą, tutaj jest metoda, która przechodzi z powrotem na ścieżkę do ikony generycznego na bazie zarówno stylu miniatur (w przypadku: kciuk i: duża) i typ zawartości:
# 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
Następnie, aby dodać nowa miniatura Właśnie dodaję pliki PNG do /images/attachments/
z prawidłową konwencją nazw plików. Mój styl thumbail nazywa: mała i mam zdefiniowane style dla programów Word, Excel i zwykłego tekstu tak w chwili obecnej mam:
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
Jeśli typ treści nie jest obsługiwany, jest nazwą rodzajową „złapać wszystkich” ikona, która jest wyświetlana:
icon.small.default.png
Awesome! Wielkie dzięki. Spróbuję tego rano. Wygląda na to, że dokładnie to, co próbowałem zrobić. – Chelsea
Jeszcze raz dziękuję, udało mi się to dobrze i trwało około 10 minut. Naprawdę doceniam pomoc. – Chelsea
Nie ma za co! – Olly