ruby-on-rails – 使用Paperclip的文件类型的自定义缩略图

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用Paperclip的文件类型的自定义缩略图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用带有 Ruby on Rails的Paperclip将资产附加到模型,这些资产可以是任何文件类型,而当资源是图像时,目前的缩略图将被生成.我希望能够为其他文件显示不同的默认图像,无论是通过在上传生成文件缩略图,还是使用default_url设置文件,但到目前为止,我找不到任何资源来帮助这个和我自己没有在哪里.

我的模型如下:

class Asset < ActiveRecord::Base  
    has_attached_file :media,:storage => :s3,:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",:path => ":attachment/:id/:style.:extension",:bucket => S3_BUCKET,:styles => {:thumb => "75x75>",:large => "600x800>",:whiny => false,:default_url => "/images/:attachment/missing.jpg"

有没有人有任何资源生成自定义缩略图,如果生成失败,或者回到类似的内容:content_type在默认url?我已经浏览了源代码,并没有得到任何地方.

谢谢!

解决方法

我实际上实现了这个相同的功能.回形针为我所有的图像和PDF生成缩略图,我添加了MS Word,Excel,HTML,TXT文件等的自定义缩略图图标.

我的解决方案相当简单.在我的模型附件(在您的资产中)我已经定义了以下方法

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

这将返回到S3上存储的缩略图的URL或基于资产内容类型(以下讨论)的通用PNG图标的本地路径. has_thumbnail?方法确定此资产是否已为其生成缩略图.这是我自己在Paperclip的叉子中添加的东西,但是您可以用自己的逻辑来替代(我不知道’标准’的方式来确定这一点,也许将路径与您定义的“丢失”路径进行比较,甚至只是将内容类型与默认列表[“image / jpeg”,“image / png”]等进行比较).

无论如何,这里是基于缩略图样式(在您的情况下:thumb和:large)和内容类型之间将路径传回通用图标的方法

# 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

然后,要添加一个新的缩略图,我只是添加PNG文件到/ images / attachments /与正确的文件名约定.我的缩略图风格被称为:小,我已经定义了Word,Excel和纯文本的样式,所以目前我有:

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

如果不支持内容类型,则会显示一个通用的“全部捕获”图标:

icon.small.default.png

猜你在找的Ruby相关文章