2013-08-13 8 views
16

Próbuję w ruby, aby przeczytać obraz z url i następnie zapisać go do Tempfile do późniejszego przetworzenia.Napisz StringIO do pliku Tempfile

To nie działa, co powoduje, że temp.jpg nie jest prawidłowym obrazem. Nie wiem, jak to zrobić.

Dzięki

Odpowiedz

29

Jesteś bardzo blisko:

file.binmode 
file.write stringIo.read 

open(url) jest tylko otwarcie strumienia do czytania. Nie odczytuje on danych, dopóki nie zadzwonisz pod numer .read (który można następnie przekazać do file.write).

+3

Dziękuję, super blisko hehe to uwielbiam. Również brakowało mi 'file.binmode' na wypadek, gdyby ktoś miał podobny problem. –

+1

thnx dla file.binmode !! – Zippie

3

Można również utworzyć pliku tymczasowego z poprawnym kodowaniem, jak tak:

file = Tempfile.new ([ 'temp', 'jpg.]: Encoding => 'ascii-8bit')

To jest to samo, co ustawienie pliku na tryb bin.