web-dev-qa-db-ja.com

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

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

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

101
csexton

open-uri は標準のRubyライブラリの一部であり、URLを開くことができるようにopenの動作を再定義しますローカルファイルとしてFileオブジェクトを返すため、readreadlinesなどのメソッドを呼び出すことができるはずです。

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }
215
Aaron Hinni

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)
}
0
fangxing