从本地文件或URL打开IO流

cse*_*ton 102 ruby stream

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

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

Aar*_*nni 216

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 }
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`open-uri`不会**流**文件,所以你不能读取它的前4k.`open-uri`会在打开时将一个**整个**文件读入内存. (19认同)
  • 知道现在有点老了,但你也可以这样做:`content = open("http://example.com").read` (9认同)
  • 你可以,但在闭包之外这样做会使文件描述符保持打开状态.这可能是某些用法的问题. (6认同)
  • `URI.parse('http://www.stackoverflow.com').open {| f | f.read}`如果你想找到一种方法来确保它不会调用`Kernal.open`.还可以了解rubocop安全规则. (3认同)
  • 有没有办法像ActionMailer附件一样返回文件对象? (2认同)