Как отключить постобработку PDF-файлов в Paperclip? - PullRequest
8 голосов
/ 17 февраля 2010

Скрепка по умолчанию пытается обработать каждый файл изображения для создания эскиза. Но он также пытается сделать это с PDF-файлами, что может быть очень трудоемкой задачей. Я попытался посмотреть на Google и нашел одно решение, но оно меняет методы Paperclip.

Как отключить постобработку pdf в Paperclip без изменения источников Paperclip?

Ответы [ 3 ]

16 голосов
/ 18 февраля 2010

Из моего текущего производственного приложения, аналогичного описанному выше, но в явном виде ищет изображения (в этом случае мой загрузчик в значительной степени принимает файлы любого типа, поэтому я обрабатываю только изображения и игнорирую все остальные):

before_post_process :is_image?

def is_image?
  ["image/jpeg", "image/pjpeg", "image/png", "image/x-png", "image/gif"].include?(self.asset_content_type) 
end
2 голосов
/ 18 февраля 2010

Одним из решений является использование before_post_process обратного вызова:

 # Model with has_attached_file
 before_post_process :forbid_pdf  # should be placed after line with has_attached_file 

 private
 def forbid_pdf
   return false if (data_content_type =~ /application\/.*pdf/)
 end

data_content_type следует заменить на соответствующее поле в вашей модели.

Другое решение, которое я придумал, заключается в созданииПользовательский процессор для изображений, в котором мы должны проверить тип файла и, если это не PDF, запустите стандартный процессор Paperclip::Thumbnail.

0 голосов
/ 24 апреля 2017

Вы можете решить это одной строкой:

before_post_process { avatar_content_type.match? %r{\Aimage\/.*\z} }

Не забудьте заменить avatar своим атрибутом (например: receipt_content_type).

...