从本地文件或 url 打开一个 IO 流
Posted
技术标签:
【中文标题】从本地文件或 url 打开一个 IO 流【英文标题】:Open an IO stream from a local file or url 【发布时间】:2010-09-20 18:47:21 【问题描述】:我知道有其他语言的库可以采用包含本地文件路径或 url 的字符串并将其作为可读 IO 流打开。
在 ruby 中是否有一种简单的方法可以做到这一点?
【问题讨论】:
【参考方案1】: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.***.com') |f| f.read
【讨论】:
有没有办法像您在此处从 ActionMailer 附件返回文件对象? 现在知道这有点老了,但你也可以这样做:content = open("http://example.com").read
你可以,但是在闭包之外这样做会使文件描述符保持打开状态。这对于某些用途来说可能是个问题。
请注意,open-uri
不会流式传输文件,因此您无法读取文件的前 4k。 open-uri
将在打开时将整个文件读入内存。
URI.parse('http://www.***.com').open |f| f.read
如果您正在寻找一种方法来确保它不会调用Kernal.open
。还可以绕过 rubocop 安全规则。以上是关于从本地文件或 url 打开一个 IO 流的主要内容,如果未能解决你的问题,请参考以下文章