Запись StringIO в Tempfile

Я пытаюсь в ruby ​​читать изображение с URL-адреса и сохранять его в 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

Это не работает, что приводит к тому, что temp.jpg является недопустимым изображением. Не знаете, как это сделать.

Спасибо

Ответы

Ответ 1

Ты супер близок:

file.binmode
file.write stringIo.read

open(url) просто открывает поток для чтения. Он фактически не считывает данные до тех пор, пока вы не назовете .read на нем (через который вы можете перейти к file.write).

Ответ 2

Вы также можете создать свой tempfile с правильной кодировкой, например:

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

Это то же самое, что установка файла в binmode.