【问题标题】:Open an IO stream from a local file or url从本地文件或 url 打开一个 IO 流
【发布时间】:2010-09-20 18:47:21
【问题描述】:

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

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

【问题讨论】:

    标签: ruby stream


    【解决方案1】:

    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 }
    

    【讨论】:

    • 有没有办法像您在此处从 ActionMailer 附件返回文件对象?
    • 现在知道这有点老了,但你也可以这样做:content = open("http://example.com").read
    • 你可以,但是在闭包之外这样做会使文件描述符保持打开状态。这对于某些用途来说可能是个问题。
    • 请注意,open-uri 不会流式传输文件,因此您无法读取文件的前 4k。 open-uri 将在打开时将整个文件读入内存。
    • URI.parse('http://www.stackoverflow.com').open { |f| f.read } 如果您正在寻找一种方法来确保它不会调用Kernal.open。还可以绕过 rubocop 安全规则。
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 2020-08-11
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 2015-04-08
    相关资源
    最近更新 更多