it-swarm.com.de

Öffnen Sie eine IO Stream von einer lokalen Datei oder URL

Ich weiß, dass es Libs in anderen Sprachen gibt, die eine Zeichenfolge verwenden können, die entweder einen Pfad zu einer lokalen Datei oder eine URL enthält, und sie als lesbaren IO - Stream öffnen. 

Gibt es eine einfache Möglichkeit, dies in Rubin zu tun?

98
csexton

open-uri ist Teil der Ruby-Standardbibliothek und definiert das Verhalten von open neu, sodass Sie eine URL sowie eine lokale Datei öffnen können. Es gibt ein File-Objekt zurück, daher sollten Sie Methoden wie read und readlines aufrufen können.

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

Für URL können Sie rest-client aus dem Dokument verwenden 

Wenn Sie die Daten aus der Antwort in eine vorhandene Datei streamen möchten, anstatt vollständig im Arbeitsspeicher gespeichert zu sein, können Sie RestClient :: Request.execute auch einen Parameter übergeben: block_response, an den Sie einen Block/proc übergeben. Dieser Block empfängt den Unverändertes, unmodifiziertes Net :: HTTPResponse-Objekt aus Net :: HTTP, das Sie verwenden können, um bei Empfang jedes Chunks direkt in eine Datei zu streamen.

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