2013-08-13 13 views
16

Ich versuche in Ruby Bild von URL zu lesen und dann zu Tempfile zu speichern, um später verarbeitet zu werden.Write StringIO zu Tempfile

require 'open-uri' 

url = 'http://upload.wikimedia.org/wikipedia/commons/8/89/Robie_House.jpg' 
file = Tempfile.new(['temp','.jpg']) 
stringIo = open(url) 
# this is part I am confused about how to save StringIO to temp file? 
file.write stringIo 

arbeiten Dies nicht, dass temp.jpg wird, was gültiges Bild ist es nicht. Ich bin mir nicht sicher, wie ich damit verfahren soll.

Dank

Antwort

29

Sie sind ganz nah:

file.binmode 
file.write stringIo.read 

open(url) wird nur der Strom zum Lesen öffnen. Es liest die Daten nicht wirklich, bis Sie .read darauf aufrufen (die Sie dann an file.write übergeben können).

+3

Danke, super nah hehe liebe das. Ich habe auch 'file.binmode' vermisst, falls jemand ein ähnliches Problem hat. –

+1

Thnx für den file.binmode !! – Zippie

3

Sie auch Ihre tempfile mit der richtigen Codierung schaffen könnten, etwa so:

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

Dies entspricht dem Einstellen der Datei in den Binmodus.