Buka aliran IO dari file atau url lokal


104

Saya tahu ada libs dalam bahasa lain yang dapat mengambil string yang berisi jalur ke file lokal atau url dan membukanya sebagai aliran IO yang dapat dibaca.

Apakah ada cara mudah untuk melakukan ini di ruby?

Jawaban:


224

open-uri adalah bagian dari pustaka Ruby standar, dan ini akan mendefinisikan ulang perilakunya opensehingga Anda dapat membuka url, serta file lokal. Ini mengembalikan sebuah Fileobjek, jadi Anda harus bisa memanggil metode seperti readdan readlines.

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

2
Apakah ada cara untuk mengembalikan objek file seperti yang Anda lakukan di sini dari lampiran ActionMailer?
AnApprentice

9
Ketahuilah bahwa ini agak tua sekarang, tetapi Anda juga dapat melakukannya:content = open("http://example.com").read
Automatico

6
Anda bisa, tetapi melakukannya di luar penutupan seperti itu akan membuat deskriptor file tetap terbuka. Ini mungkin menjadi masalah untuk beberapa penggunaan.
Aaron Hinni

19
perhatikan bahwa open-uritidak akan mengalirkan file, jadi Anda tidak dapat membaca 4k pertama darinya. open-uriakan membaca seluruh file ke memori pada saat dibuka.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Jika Anda mencari cara untuk memastikan itu tidak menelepon Kernal.open. Juga menyiasati aturan keamanan rubocop.
newdark-it
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.