ローカルファイルへのパスまたはURLのいずれかを含む文字列を取得し、読み取り可能なIOストリームとして開くことができる他の言語のライブラリがあることを知っています。
ルビーでこれを行う簡単な方法はありますか?
open-uri は標準のRubyライブラリの一部であり、URLを開くことができるようにopen
の動作を再定義しますローカルファイルとして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 }
Urlについては、ドキュメントから rest-client が必要な場合があります
メモリ内ではなく、応答からファイルにデータをストリーミングしたい場合は、RestClient :: Request.executeパラメータを渡すこともできます:block_responseにブロック/ procを渡します。このブロックはNet :: HTTPの未修正のNet :: HTTPResponseオブジェクト。これを使用して、各チャンクを受信するたびにファイルに直接ストリーミングできます。
File.open('/some/output/file', 'w') {|f|
block = proc { |response|
response.read_body do |chunk|
f.write chunk
end
}
RestClient::Request.execute(method: :get,
url: 'http://example.com/some/really/big/file.img',
block_response: block)
}