我知道其他语言中的libs可以采用包含本地文件路径或URL的字符串,并将其作为可读IO流打开。
在ruby中有一种简单的方法吗?
答案 0 :(得分:211)
open-uri 是标准Ruby库的一部分,它将重新定义open
的行为,以便您可以打开URL和本地文件。它会返回File
个对象,因此您应该可以调用read
和readlines
等方法。
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)
}