Как создавать эскизы только для файлов изображений с помощью Paperclip? - PullRequest
2 голосов
/ 28 июня 2011

Я использую следующий код для создания 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.>

(Для файлов изображений все работает нормально: миниатюра создается, и ошибки нет.)

Это потому, что Paperclip пытается создать миниатюру из my.xlsx?

В какой конфигурации создаст миниатюры только для файлов изображений ?

Вот соответствующий код:

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

Ответы [ 2 ]

8 голосов
/ 28 июня 2011

Я использовал следующее хорошее решение:

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 голосов
/ 28 июня 2011

Измените строку has_attached_file следующим образом:

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

Это предотвратит появление ошибки, когда миниатюры не создаются.Обратите внимание, что при обработке изображения ошибки не возникнут.

...