De hecho, he implementado esta misma característica. Paperclip genera miniaturas para todas mis imágenes y archivos PDF, y he agregado iconos de miniaturas personalizadas para MS Word, Excel, HTML, archivos TXT, etc.
Mi solución es bastante sencilla. En mi modelo Attachment
(en su caso Asset
) he definido el siguiente método:
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
Esto devuelve una URL a una imagen en miniatura almacenados en S3, o una ruta de acceso local a un icono PNG genérico basado en los activos de contenido tipo (discutido a continuación). El método has_thumbnail?
determina si se ha generado o no una miniatura para este elemento. Esto es algo que agregué en mi propia bifurcación de Paperclip, pero puedes sustituirlo por tu propia lógica (no estoy seguro de la manera "estándar" de determinar esto, tal vez comparando la ruta con tu camino "perdido" definido, o incluso simplemente comparando el tipo de contenido con una lista predeterminada ["image/jpeg", "image/png"] etc).
De todos modos, aquí está el método que pasa de nuevo una ruta a un icono genérico basado tanto en el estilo de miniaturas (en su caso: pulgar e: grande) y el tipo de contenido:
# 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
A continuación, añadir una nueva miniatura Acabo de agregar archivos PNG al /images/attachments/
con la convención correcta de nombre de archivo. Mi estilo de miniatura se llama: pequeña y he definido estilos de Word, Excel y de texto plano por lo que en la actualidad tengo:
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 no se admite el tipo de contenido, hay un genérico 'coger todos' icono que se muestra:
icon.small.default.png
Awesome! Muchas gracias. Lo intentaré a primera hora de la mañana. Parece exactamente lo que estaba tratando de hacer. – Chelsea
Gracias de nuevo, funcionó bien en aproximadamente 10 minutos. Realmente aprecio la ayuda. – Chelsea
¡De nada! – Olly