2008-11-04 33 views
85

Tôi biết có libs bằng các ngôn ngữ khác có thể lấy một chuỗi chứa đường dẫn đến tệp cục bộ hoặc url và mở nó dưới dạng luồng IO có thể đọc được.Mở luồng IO từ tệp cục bộ hoặc url

Có cách nào dễ dàng để thực hiện điều này bằng ruby ​​không?

Trả lời

191

open-uri là một phần của thư viện chuẩn của Ruby và sẽ xác định lại hành vi của open để bạn có thể mở url, cũng như tệp cục bộ. Nó trả về một đối tượng File, vì vậy bạn có thể gọi các phương thức như readreadlines.

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

@Đây chỉ là ngày của tôi. Cảm ơn bạn! – AnApprentice

+2

Có cách nào để trả về một đối tượng tệp như bạn đã làm ở đây từ tệp đính kèm ActionMailer không? – AnApprentice

+0

Điều đó 'tuyệt vời - cảm ơn. –

0

Đối url, bạn có thể muốn rest-client, từ tài liệu của mình

Nếu bạn muốn dòng dữ liệu từ các phản ứng vào một tập tin vì nó đi kèm, chứ không phải là hoàn toàn trong bộ nhớ, bạn cũng có thể thông qua RestClient :: Request.execute một tham số: block_response mà bạn vượt qua một khối/proc.This khối nhận được nguyên chưa được sửa đổi Net :: HTTPResponse đối tượng từ Net :: HTTP, mà bạn có thể sử dụng để dòng trực tiếp vào một tập tin như từng đoạn Đã nhận.

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) 
} 
Các vấn đề liên quan