Abra um fluxo IO de um arquivo local ou url


104

Eu sei que existem libs em outras línguas que podem pegar uma string que contém um caminho para um arquivo local ou um url e abri-lo como um fluxo IO legível.

Existe uma maneira fácil de fazer isso em rubi?

Respostas:


224

open-uri faz parte da biblioteca Ruby padrão e redefinirá o comportamento de openpara que você possa abrir uma url, bem como um arquivo local. Ele retorna um Fileobjeto, então você deve ser capaz de chamar métodos como reade readlines.

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

2
Existe uma maneira de retornar um objeto de arquivo como você fez aqui a partir de um anexo do ActionMailer?
AnApprentice

9
Saiba que isso é um pouco antigo agora, mas você também pode fazer:content = open("http://example.com").read
Automatico

6
Você pode, mas fazê-lo fora do encerramento manterá o descritor de arquivo aberto. Isso pode ser um problema para alguns usos.
Aaron Hinni de

19
note que open-urinão irá transmitir um arquivo, então você não pode ler os primeiros 4k dele. open-urilerá um arquivo inteiro na memória no momento da abertura.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Se você está procurando uma forma de segurar não ligue Kernal.open. Também contorna as regras de segurança do Rubocop.
newdark-it
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.