Ответ 1
Ты супер близок:
file.binmode
file.write stringIo.read
open(url)
просто открывает поток для чтения. Он фактически не считывает данные до тех пор, пока вы не назовете .read
на нем (через который вы можете перейти к file.write
).
Я пытаюсь в 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
является недопустимым изображением. Не знаете, как это сделать.
Спасибо
Ты супер близок:
file.binmode
file.write stringIo.read
open(url)
просто открывает поток для чтения. Он фактически не считывает данные до тех пор, пока вы не назовете .read
на нем (через который вы можете перейти к file.write
).
Вы также можете создать свой tempfile с правильной кодировкой, например:
file = Tempfile.new(['temp', '. jpg'],: encoding = > 'ascii-8bit')
Это то же самое, что установка файла в binmode.