Ouvrez un flux IO à partir d'un fichier local ou d'une URL


104

Je sais qu'il existe des bibliothèques dans d'autres langues qui peuvent prendre une chaîne qui contient un chemin vers un fichier local ou une URL et l'ouvrir en tant que flux IO lisible.

Existe-t-il un moyen simple de le faire en rubis?

Réponses:


224

open-uri fait partie de la bibliothèque Ruby standard, et il redéfinira le comportement de openafin que vous puissiez ouvrir une URL, ainsi qu'un fichier local. Il renvoie un Fileobjet, vous devriez donc pouvoir appeler des méthodes comme readet 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-t-il un moyen de renvoyer un objet fichier comme vous l'avez fait ici à partir d'une pièce jointe ActionMailer?
AnApprentice

9
Sachez que c'est un peu vieux maintenant, mais vous pouvez aussi faire:content = open("http://example.com").read
Automatico

6
Vous pouvez, mais le faire en dehors de la fermeture comme cela gardera le descripteur de fichier ouvert. Cela peut être un problème pour certaines utilisations.
Aaron Hinni

19
notez que open-uricela ne diffusera pas un fichier, vous ne pouvez donc pas en lire un premier 4k. open-urilira un fichier entier en mémoire au moment de l'ouverture.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Si vous cherchez un moyen de vous assurer, il n'appelle pas Kernal.open. Contourne également les règles de sécurité de rubocop.
newdark-it
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.