Ruby 从本地文件或url打开IO流

Ruby 从本地文件或url打开IO流,ruby,stream,Ruby,Stream,我知道其他语言中也有lib,它们可以获取包含本地文件路径或url的字符串,并将其作为可读的IO流打开 在ruby中有没有一种简单的方法可以做到这一点?是标准ruby库的一部分,它将重新定义open的行为,以便您可以打开url和本地文件。它返回一个文件对象,因此您应该能够调用读取和读取行等方法 require 'open-uri' file_contents = open('local-file.txt') { |f| f.read } web_contents = open('http://w

我知道其他语言中也有lib,它们可以获取包含本地文件路径或url的字符串,并将其作为可读的IO流打开

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

是标准ruby库的一部分,它将重新定义
open
的行为,以便您可以打开url和本地文件。它返回一个
文件
对象,因此您应该能够调用
读取
读取行
等方法

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

有没有一种方法可以像您在这里通过ActionMailer附件那样返回文件对象?要知道,这现在有点旧了,但您也可以这样做:
content=open(“http://example.com可以阅读
,但在闭包之外这样做会使文件描述符保持打开状态。这可能是某些用法的问题。请注意,
openuri
不会流式传输文件,因此您无法读取文件的前4k
openuri
将在打开时将整个文件读取到内存。
uri.parse('http://www.stackoverflow.com“).open{| f | f.read}
如果您正在寻找一种方法来确保它不会调用
Kernal.open
。还可以绕过rubocop安全规则。