从本地文件或URL打开IO流

113

我知道其他语言有一些库可以接受包含本地文件路径或URL的字符串,并将其作为可读取的IO流打开。

在Ruby中是否有简单的方法来实现这个功能?

1个回答

243

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 }

2
有没有办法从ActionMailer附件中返回像这里一样的文件对象? - AnApprentice
9
知道这已经有点过时了,但你也可以这样做:content = open("http://example.com").read - Automatico
7
你可以这样做,但是如果在闭包之外这样操作会保持文件描述符的打开状态。对于某些用途来说,这可能是个问题。 - Aaron Hinni
23
请注意,open-uri 无法 流式传输 文件,因此您无法读取其前4k内容。在打开文件时,open-uri 将整个文件读入内存中。 - zed_0xff
14
如果你想要确保不调用 Kernal.open,同时避开 Rubocop 的安全规则,可以使用 URI.parse('http://www.stackoverflow.com').open { |f| f.read } - User128848244
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接