将StringIO写入Tempfile

时间:2013-08-13 18:09:57

标签: ruby io

我正在尝试使用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无效图片。不知道如何继续这个。

由于

2 个答案:

答案 0 :(得分:33)

你非常接近:

file.binmode
file.write stringIo.read

open(url)正在打开阅读流。在您调用.read之后,它实际上不会读取数据(然后您可以将其传入file.write)。

答案 1 :(得分:4)

您还可以使用正确的编码创建临时文件,如下所示:

  

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

这与将文件设置为binmode相同。