2011-06-28 38 views
2

我用下面的代码从上传的文件创建Asset S:如何仅使用回形针创建图像文件的缩略图?

def upload 
    uploader = User.find_by_id(params[:uploader_id]) 
    params[:assets].each do |file| 
    new_asset = uploader.assets.build(:asset => file) # Here the error appears 
    new_asset.save 
    end 
    ... 
end 

我注意到,当我上传非图片文件,例如my.xlsx,我得到了以下错误:

[paperclip] identify -format %wx%h "C:/temp/stream20110628-460-3vqjnd.xlsx[0]" 2>NUL 
[paperclip] An error was received while processing: 
#<Paperclip::NotIdentifiedByImageMagickError: C:/temp/stream20110628-460-3vqjnd.xlsx is 
not recognized by the 'identify' command.> 

(对于图像文件,一切工作正常:缩略图被创建,并且没有错误)

是不是因为回形针试图创建my.xlsx缩略图?

什么配置会只为图像文件创建缩略图

下面是一些相关的代码:

class Asset < ActiveRecord::Base 
    belongs_to :uploader, :class_name => "User" 
    has_attached_file :asset, :styles => { :thumb => "80x80#" } 
end 

回答

8

我用下面的很好的解决方案:

before_post_process :image? 

def image? 
    (asset_content_type =~ SUPPORTED_IMAGES_REGEX).present? 
end 

其中:

SUPPORTED_IMAGE_FORMATS = ["image/jpeg", "image/png", "image/gif", "image/bmp"] 
SUPPORTED_IMAGES_REGEX = Regexp.new('\A(' + SUPPORTED_IMAGE_FORMATS.join('|') + ')\Z') 
0

更改has_attached_file行改为:

has_attached_file :asset, :styles => { :thumb=> "80x80#" }, :whiny_thumbnails => false 

这将阻止它没有创建缩略图时引发错误。但请注意,如果在处理图像时发生错误,则不会引发错误。

+0

我不喜欢掩盖错误。它应该是一个很好的方式来定义哪些文件将创建缩略图... –