Mở luồng IO từ tệp hoặc url cục bộ


104

Tôi biết rằng có các lib ở 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.

Có một cách dễ dàng để làm điều này trong ruby ​​không?

Câu trả lời:


224

open-uri là một phần của thư viện Ruby tiêu chuẩn và nó sẽ xác định lại hành vi của opennó để bạn có thể mở một url, cũng như một tệp cục bộ. Nó trả về một Fileđối tượng, 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 }

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

9
Biết rằng điều này bây giờ hơi cũ, nhưng bạn cũng có thể làm:content = open("http://example.com").read
Automatico

6
Bạn có thể, nhưng làm điều đó bên ngoài đóng như vậy sẽ giữ cho bộ mô tả tệp mở. Đây có thể là vấn đề đối với một số cách sử dụng.
Aaron Hinni

19
lưu ý rằng điều đó open-urisẽ không truyền trực tuyến một tệp, vì vậy bạn không thể đọc 4k đầu tiên của nó. open-urisẽ đọc toàn bộ tệp vào bộ nhớ tại thời điểm mở.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Nếu bạn đang tìm cách để đảm bảo nó không gọi Kernal.open. Cũng nhận được xung quanh các quy tắc bảo mật rubocop.
newdark-it
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.