Ruby打开返回一个字符串而不是一个文件?

Shp*_*ord 4 ruby open-uri file

当尝试open()远程图像时,有些人返回,StringIO而其他人则返回File......我该File怎么强迫?

data = open("http://graph.facebook.com/61700024/picture?type=square")
=> #<StringIO:0x007fd09b013948>

data = open("http://28.media.tumblr.com/avatar_7ef57cb42cb0_64.png")
=> #<StringIO:0x007fd098bf9490>

data = open("http://25.media.tumblr.com/avatar_279ec8ee3427_64.png")
=> #<File:/var/folders/_z/bb18gdw52ns0x5r8z9f2ncj40000gn/T/open-uri20120229-9190-mn52fu>
Run Code Online (Sandbox Code Playgroud)

我正在使用Paperclip来保存远程图像(存储在S3中),所以基本上想做:

user = User.new
user.avatar = open(url)
user.save
Run Code Online (Sandbox Code Playgroud)

sia*_*ame 13

Open-URI对象有一个10KB限制StringIO,超出它的任何东西,它将它存储为临时文件.

实现此目的的一种方法是实际更改对象Open-URI限制所需的常量StringIO.您可以通过将常量设置为0;

OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
OpenURI::Buffer.const_set 'StringMax', 0
Run Code Online (Sandbox Code Playgroud)

将它添加到您的初始化程序中,您应该很高兴.