2008-11-04 2 views

Antwort

191

open-uri ist Teil der Ruby-Standardbibliothek und definiert das Verhalten von open neu, sodass Sie sowohl eine URL als auch eine lokale Datei öffnen können. Es gibt ein File Objekt zurück, so dass 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 } 
+3

@This habe gerade meinen Tag. Vielen Dank! – AnApprentice

+2

Gibt es eine Möglichkeit, ein Dateiobjekt wie hier von einem ActionMailer-Anhang zurückzugeben? – AnApprentice

+0

Das 'ausgezeichnet - danke. –

0

Für URL können Sie rest-client, von seinem Dokument wollen

Wenn Sie die Daten aus der Antwort auf eine Datei streamen möchten, wie es, anstatt vollständig in Erinnerung kommt, können Sie auch pass RestClient :: Request.execute einen Parameter: block_response, an den du einen Block/proc übergibst.Dieser Block empfängt das unformatierte Net :: HTTPResponse-Objekt von Net :: HTTP, das du verwenden kannst, um direkt in eine Datei zu streamen Ist angekommen.

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