2008-11-04 32 views
85

我知道其他語言中有libs可以接受包含本地文件或url的路徑的字符串,並將其作爲可讀IO流打開。從本地文件或URL打開IO流

有沒有簡單的方法來做到這一點在紅寶石?

回答

191

open-uri是標準Ruby庫的一部分,它將重新定義open的行爲,以便您可以打開url以及本地文件。它返回一個File對象,所以你應該能夠調用如readreadlines的方法。

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

@This只是我的一天。謝謝! – AnApprentice 2010-12-06 00:03:28

0

對於URL,你可能想rest-client,從它的文檔

如果你想,因爲它來的,而不是完全在內存中以流從響應文件中的數據,也可以傳遞RestClient :: Request.exe執行一個參數:block_response,你傳遞一個block/proc.This塊從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) 
}