2009-12-07 15 views
9

Używam spinacza do załączników w mojej aplikacji. Piszę skrypt importujący kilka starych danych, ale nie wiem, jak tworzyć spinacze z plików na dysku. Moim pierwszym przypuszczeniem jest stworzenie fałszywych obiektów wieloczęściowych CGI, ale wydaje się to trochę prostym rozwiązaniem, a moja pierwsza próba nie powiodła się, jak sądzę, ponieważ nie uzyskałem prawidłowej metody to_tempfile.Importowanie starych danych za pomocą szyn i spinacza

Czy istnieje odpowiedni sposób, aby to zrobić? Wygląda na to, że powinno być dość łatwo.

Odpowiedz

16

Wiem, że zrobiłem to samo i uważam, że właśnie utworzyłem obiekt File ze ścieżki do każdego pliku i przypisałem go do atrybutu image. Na tym pliku uruchomi się Paperclip:

thing.image = File.new("/path/to/file.png") 
thing.save 
+1

Uwaga do siebie, spróbuj najprostsza rzecz, która mogłaby działać następnym razem. – Zak

+0

Przypominam sobie, że jesteś tak samo zaskoczony jak ty. – Ben

+0

Tak - to absolutnie kołysze –

14

Działa to doskonale w przypadku plików lokalnych, ale nie działa tak dobrze w przypadku plików zdalnych. Mam aplikację, która używa spinacza do przesyłania zdjęć. Te zdjęcia są zapisywane na amazon s3. W każdym razie, ja miałem jakieś stare dane, które musiałem importować więc próbowałem następujące:

thing.image = open('http://www.someurl.com/path/to/image.jpg') 
thing.save 

Jeśli plik jest niewielki (powiedzmy, mniej niż 10K), a następnie openuri zwraca StringIO przedmiot i mój plik będzie przechowywana na s3 as stringio.txt

Jeśli plik jest większy niż około 10K, to openuri zwraca obiekt TempFile. Ale nazwa pliku na s3 kończy się wyjątkowy, ale naprawdę nie odnoszące się do oryginalnego pliku z image.jpg

udało mi się rozwiązać ten problem w następujący sposób:

remote_photo = open('http://www.someurl.com/path/to/image.jpg') 
def remote_photo.original_filename;base_uri.path.split('/').last; end 
thing.image = remote_photo 
thing.save 
+0

+1 Wow .. zrobiłeś mój dzień .. – bragboy

+0

Thx. dla 'original_filename' :) –

Powiązane problemy