ローカルファイルまたはURLからIOストリームを開く


104

ローカルファイルへのパスまたはURLのいずれかを含む文字列を取得して、読み取り可能なIOストリームとして開くことができる他の言語のlibがあることを知っています。

ルビでこれを行う簡単な方法はありますか?

回答:


224

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 }

2
ここで行ったように、ActionMailer添付ファイルからファイルオブジェクトを返す方法はありますか?
AnApprentice 2010

9
これは今少し古いですけど、あなたも行うことができます:content = open("http://example.com").read
Automatico

6
できますが、そのようにクロージャーの外で実行すると、ファイル記述子が開いたままになります。これは、一部の用途では問題になる可能性があります。
アーロンヒンニ2014

19
ノートopen-uriはありませんストリーミングあなたはそれの最初の4Kを読み取ることができないので、ファイルを。開いた瞬間にファイル全体をメモリにopen-uri読み込みます。
zed_0xff 2014年

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }あなたがそれを保証する方法を探しているなら、それは呼ばれませんKernal.open。rubocopセキュリティルールも回避します。
newdark-it 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.