2010-07-01 16 views
12

Chciałbym przeczytać geometrię zdjęcia z mojego pojemnika S3.Czy spinacz może odczytać geometrię zdjęcia z łyżki S3?

Kiedy to na mój lokalny, to działa:

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

Ale to nie wydają się działać po zmianie mojego modelu nad S3 .. jakieś zalecenia?

Im większa historia, staram się napisać kod, który pozwoli mi odzyskać zdjęcia z S3, zezwolić użytkownikom na ich przycięcie, a następnie ponownie załadować je z powrotem do S3 wciąż przypisanego spinaczowi.

EDIT:

Jest to błąd, który jest zwracany:

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 

Odpowiedz

14

Jeśli używasz S3 jako mechanizmu przechowywania, nie można użyć metody geometrii powyżej (zakłada miejscowy plik). Spinacz można przekonwertować plik z S3 do lokalnego tempfile z Paperclip::Geometry.from_file:

Tu jest mój zaktualizowany kod:

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

#to_file usunięto spinacz 3,0. 1. W tej i późniejszych wersjach użyj 'Paperclip :: Geometry.from_file (Paperclip.io_adapters.for (photo.styles [style]))' –

+2

@IsaacBetesh To nie działa dla mnie. Pojawia się następujący błąd: 'ścieżka Paperclip :: AbstractAdapter # przekazana do @ tempfile.path, ale plik @tempfile jest zerowy: Paperclip :: NilAdapter'. FYI, używam s3 z klejnotem mgły. – npouillard

+0

Używam bezpośrednio S3 (tj. Aws-sdk gem), więc nie mogę powiedzieć nic konkretnego o mgle, ale twój ślad stosu prawdopodobnie zawiera pewne wskazówki. –

10

Działa to dla S3 i lokalnym

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 
Powiązane problemy