从本地文件或 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 对象,因此您应该能够调用readreadlines 之类的方法。

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 流的主要内容,如果未能解决你的问题,请参考以下文章

使用URLConnection下载文件或图片并保存到本地

Io流总结

无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]

IO 复习字节流字符流拷贝文件

Java读取本地文件(输入流)

输入流输出流IO的理解