Abra una secuencia IO desde un archivo o URL local

104

Sé que hay bibliotecas en otros idiomas que pueden tomar una cadena que contenga una ruta a un archivo local o una URL y abrirla como una secuencia de E / S legible.

¿Existe una manera fácil de hacer esto en ruby?

csexton
fuente

Respuestas:

224

open-uri es parte de la biblioteca estándar de Ruby, y redefinirá el comportamiento de openpara que pueda abrir una URL, así como un archivo local. Devuelve un Fileobjeto, por lo que debería poder llamar a métodos como ready 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
fuente
2
¿Hay alguna forma de devolver un objeto de archivo como lo hizo aquí desde un archivo adjunto de ActionMailer?
AnApprentice
9
Sepa que esto es un poco viejo ahora, pero también puede hacer:content = open("http://example.com").read
Automático
6
Puede, pero hacerlo fuera del cierre así mantendrá abierto el descriptor del archivo. Esto puede ser un problema para algunos usos.
Aaron Hinni
19
tenga en cuenta que open-urino transmitirá un archivo, por lo que no puede leer un primer 4k de él. open-urileerá un archivo completo en la memoria en el momento de la apertura.
zed_0xff
3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Si busca una forma de asegurarse, no llame Kernal.open. También evita las reglas de seguridad de Rubocop.
newdark-it