从本地文件或URL打开IO流

时间:2008-11-04 21:36:13

标签: ruby stream

我知道其他语言中的libs可以采用包含本地文件路径或URL的字符串,并将其作为可读IO流打开。

在ruby中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:211)

open-uri 是标准Ruby库的一部分,它将重新定义open的行为,以便您可以打开URL和本地文件。它会返回File个对象,因此您应该可以调用readreadlines等方法。

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }

答案 1 :(得分:0)

对于网址,您可能需要rest-client来自其文档

  

如果要将响应中的数据流式传输到文件,而不是完全在内存中,您还可以传递RestClient :: Request.execute参数:block_response,您传递一个块/ proc.This block从Net :: HTTP接收原始未修改的Net :: HTTPResponse对象,您可以使用它在接收到每个块时直接流式传输到文件。

File.open('/some/output/file', 'w') {|f|
  block = proc { |response|
    response.read_body do |chunk|
      f.write chunk
    end
  }
  RestClient::Request.execute(method: :get,
                              url: 'http://example.com/some/really/big/file.img',
                              block_response: block)
}