2011-09-15 10 views
5

Korzystanie spinacza, chcę, aby pobrać obraz z adresu URL jak poniżej:Spinacz: Przypisywanie obrazu programowo i ustawić jego nazwa

require 'open-uri' 

user.photo = open(url) 

Problem polega na tym, że ja wtedy skończyć z pliku podobnego „typu otwarty uri20110915-4852-1o7k5uw ". Czy jest jakikolwiek sposób zmienić nazwę pliku na user.photo?

Co więcej, Paperclip zapisuje moje pliki na S3, więc byłoby jeszcze lepiej, gdybym mógł ustawić nazwę pliku w początkowym zadaniu, aby obrazy zostały przesłane do prawego klawisza S3. Coś takiego:

user.photo = open(url), :filename => URI.parse(url).path 

Odpowiedz

6

Można pisać nazwę pliku z powrotem na przykład poprzez:

photo.instance_write(:file_name, new_file_name) 

Więc jeśli URL źródłem jest tak:

http://example.com/foo.jpg 

Można najpierw przeanalizować nazwę z adresu URL (aby uzyskać foo.jpg), a następnie zapisz go z powrotem do instancji, korzystając z powyższej metody: instance_write.

+0

I czynię to po przypisaniu 'open (url)' do zdjęcia? Próbowałem tego z istniejącym użytkownikiem, którego zdjęcie jest już na S3. Teraz 'u.photo_file_name' zwraca nową nazwę, ale' u.photo (: original) 'nadal ma stary adres URL S3, a także' u.photo.path'. A plik na S3 nie poruszył się. –

+1

Jeśli obraz istnieje, być może trzeba będzie wywołać "photo.reprocess!" aby Paperclip zaktualizował twój backend pamięci (S3). W przeciwnym razie powyższe działa przed pierwszym zapisaniem i powinno zostać zapisane poprawnie do S3, gdy w końcu nastąpi zapisanie. –

+0

Pamiętaj, że czasami spinacz zmienia nazwę pliku, aby zastąpić znaki, więc dowolna ustawiona nazwa pliku musi być zgodna z tymi regułami, w przeciwnym razie może go zgubić spinacz . – James

5
io = open(url) 
def io.original_filename; base_uri.path.split('/').last; end 

Spowoduje to ustawienie nazwy pliku w nazwie pliku w url.

+0

Niedawno uderzyłem w ten problem i tym razem musiałem przyjąć coś bardziej podobnego do tego podejścia. Oto blog na ten temat: http://www.illuminatedcomputing.com/posts/2013/06/paperclip-with-server-side-files/ –

Powiązane problemy