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?

csexton.dll
sumber

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 }
Aaron Hinni
sumber
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