2010-07-01 2 views
12

Я хотел бы прочитать геометрию фотографии с моего контейнера S3.Может ли скрепка считывать геометрию фотографий с ведра S3?

Когда это на мой местный, это работает:

def photo_geometry(style = :original) 
    @geometry ||= {} 
    @geometry[style] ||= Paperclip::Geometry.from_file photo.path(style) 
end 

Но это, кажется, не работает, когда я включаю свою модель к S3 .. Любые рекомендации?

Большая история, я пытаюсь написать код, который позволит мне получать фотографии с S3, разрешать пользователям обрезать их, а затем повторно загружать обратно в S3, все еще назначенный с помощью paperclip.

EDIT:

Это ошибка, которая возвращается:

Paperclip::NotIdentifiedByImageMagickError: photos/199/orig/greatReads.png is not recognized by the 'identify' command. 
from /Users/daniellevine/Sites/hq_channel/vendor/gems/thoughtbot-paperclip-2.3.1/lib/paperclip/geometry.rb:24:in `from_file' 
from /Users/daniellevine/Sites/hq_channel/app/models/photo.rb:68:in `photo_geometry' 
from (irb):1 

ответ

14

Если вы используете S3 в качестве механизма хранения, вы не можете использовать метод геометрии выше (это предполагает локальное файл). Скрепка может конвертировать из S3 файла на локальный TempFile с Paperclip::Geometry.from_file:

Вот мой обновленный код:

def photo_geometry(style = :original) 
    @geometry ||= {} 
    @geometry[style] ||= Paperclip::Geometry.from_file(photo.to_file(style)) 
end 
+2

#to_file был удален в скрепку 3.0. 1. В этой и более поздних версиях используйте 'Paperclip :: Geometry.from_file (Paperclip.io_adapters.for (photo.styles [style])) –

+2

@IsaacBetesh Это не работает для меня. Я получаю следующую ошибку: 'Paperclip :: AbstractAdapter # путь делегирован в @ tempfile.path, но @tempfile равен nil: Paperclip :: NilAdapter'. FYI, я использую s3 с драгоценным камнем тумана. – npouillard

+0

Я использую S3 напрямую (т. Е. Aws-sdk gem), поэтому я не могу сказать ничего определенного о тумане, но ваша трассировка стека, вероятно, будет содержать некоторые подсказки. –

10

Это работает для s3 и местного

def photo_geometry(style = :original) 
    @geometry ||= {} 
    photo_path = (photo.options[:storage] == :s3) ? photo.url(style) : photo.path(style) 
    @geometry[style] ||= Paperclip::Geometry.from_file(photo_path) 
end 
Смежные вопросы