Как сказать скрепке не сохранять исходный файл?

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


person Jade    schedule 10.07.2010    source источник
comment
Посмотрите мой ответ здесь   -  person laertiades    schedule 31.08.2014


Ответы (3)


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

:styles => { :original => '300x168>', :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, ...}
person Chris G.    schedule 21.07.2010
comment
Потрясающий. Спасибо, Крис. Не могу поверить, что я проглядел это. - person Jade; 22.07.2010

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

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

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

ему все равно, какая обработка была за сценой. Он просто убивает исходный файл)

person Roaring Stones    schedule 21.11.2012
comment
Вы абсолютно правы, переопределение геометрии :original влияет на обработку всех остальных. Но не могли бы вы объяснить свое решение по предотвращению загрузки оригинала более подробно, пожалуйста, я в замешательстве! Спасибо! - person Sujimichi; 17.02.2016
comment
@Sujimichi хорошо, после сохранения reprocess_attach проверяет, существует ли вложение как исходный файл. Если это так, он гарантирует, что все файлы будут сброшены в файловую систему (сохранение), а затем удалит исходный файл. - person Roaring Stones; 18.02.2016

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

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

: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]
person Trip    schedule 10.07.2010
comment
Спасибо за ответ, Трип. - person Jade; 21.07.2010