Apri un flusso di I / O da un file locale o da un URL


104

So che ci sono librerie in altre lingue che possono prendere una stringa che contiene un percorso a un file locale o un URL e aprirlo come un flusso IO leggibile.

C'è un modo semplice per farlo con il rubino?

Risposte:


224

open-uri fa parte della libreria Ruby standard e ridefinirà il comportamento di in openmodo da poter aprire un URL, oltre a un file locale. Restituisce un Fileoggetto, quindi dovresti essere in grado di chiamare metodi come 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
C'è un modo per restituire un oggetto file come hai fatto qui da un allegato di ActionMailer?
AnApprentice

9
Sappi che è un po 'vecchio adesso, ma puoi anche fare:content = open("http://example.com").read
Automatico

6
Puoi, ma farlo al di fuori della chiusura in questo modo manterrà aperto il descrittore di file. Questo potrebbe essere un problema per alcuni utilizzi.
Aaron Hinni

19
nota che open-urinon trasmetterà un file, quindi non puoi leggerne un primo 4k. open-urileggerà un intero file in memoria al momento dell'apertura.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Se stai cercando un modo per assicurarti non chiama Kernal.open. Inoltre aggira le regole di sicurezza di rubocop.
newdark-it
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.