24

私はルビーでURLTempfileから画像を読み込んで、後で処理できるように保存しようとしています。

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

これは機能せず、temp.jpg有効な画像ではありません。これをどのように進めるかわかりません。

ありがとう

4

2 に答える 2

40

あなたはとても近いです:

file.binmode
file.write stringIo.read

open(url)読み取り用にストリームを開いているだけです。呼び出すまで、実際にはデータを読み取りません.read(その後、 に渡すことができますfile.write)。

于 2013-08-13T18:13:21.007 に答える
4

次のように、正しいエンコーディングで一時ファイルを作成することもできます。

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

これは、ファイルを binmode に設定するのと同じです。

于 2014-04-20T10:09:18.313 に答える