Как мне указать скрепку, чтобы не сохранять исходный файл? - PullRequest
25 голосов
/ 10 июля 2010

Как мне сказать Paperclip не сохранять исходный файл при его загрузке?Или, что еще лучше, хранить уменьшенную версию файла как оригинал?

Ответы [ 3 ]

44 голосов
/ 21 июля 2010

Я считаю, что вы можете просто определить стиль для: оригинала, чтобы скрепка заменяла оригинал этим размером.

:styles => { :original => '300x168>', :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, ...}
4 голосов
/ 21 ноября 2012

Решение Cris G может быть хорошим в большинстве простых случаев, но оно имеет ограничения. Учтите, что: style: original Paperclip обрабатывает в первую очередь другие, поэтому после этого обновляется: исходное изображение (теперь намного меньше) будет источником для последующей обработки. Следовательно, вы вынуждены придерживаться оригинального стиля с наилучшим разрешением. Ситуация усугубляется тем, что вам нужно обрезать изображения с помощью процессора: это ситуация, когда вам действительно нужно настоящее оригинальное качество. )

Поэтому я бы порекомендовал вам несколько сырое (нужно выяснить, как получить все вложения модели) решение:

after_save :reprocess_attach

private

def reprocess_attach
    if self.<atch_name>.present? && Pathname.new(self.<atch_name>.path).exist?
        self.<atch_name>.save
        File.unlink(self.<atch_name>.path)
    end
end

не важно, какая обработка была за сценой. Это просто убивает оригинальный файл)

0 голосов
/ 10 июля 2010

Скрепка всегда сохраняет оригинал по умолчанию, но я «верю», что если вы просто удалите его из миграции, он не будет пытаться сохранить его.

Я сохраняю масштабированный оригинал на своей модели, чтобы пользователи могли позже редактировать свои изображения. Моя модель выглядит так:

:styles => { :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, :resized_thumb => {:geometry => "115x70>"}, :deal => {:geometry => "64x56#"},  
:cropped_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}#", :jcrop => true},
:resized_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}>"},

:orig => '300x168>',  #this is the scaled original that I call later


:cropped_orig => {:geometry => '300x168#', :jcrop => true},
:resized_orig => {:geometry => '300x168>'} },
:processors => [:jcropper]
...