从本地文件或url打开一个IOstream

我知道有其他语言的库,可以采取一个string,包含一个本地文件或url的path,并打开它作为一个可读的IOstream。

有没有一种简单的方法来做到这一点在ruby?

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 } 

对于url,您可能需要rest-client ,从它的文档

如果您想将响应中的数据stream传输到文件中,而不是完全在内存中,则还可以传递RestClient :: Request.execute参数:block_response,将block / proc传递给该参数。此块接收来自Net :: HTTP的原始未修改的Net :: HTTPResponse对象,可以用来在接收到每个块时直接stream式传输到文件。

 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) }