2010-02-17 2 views
8

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

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

ответ

16

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

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 
+0

Привет Тоби, где вы помещаете этот код? Благодарю. – sscirrus

+0

В модели iirc –

2

Одним из решений является использование 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

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

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

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

Смежные вопросы