Otwórz strumień We / Wy z lokalnego pliku lub adresu URL

104

Wiem, że istnieją biblioteki w innych językach, które mogą przyjmować ciąg zawierający ścieżkę do pliku lokalnego lub adres URL i otwierać go jako czytelny strumień IO.

Czy istnieje łatwy sposób na zrobienie tego w Ruby?

csexton
źródło

Odpowiedzi:

224

open-uri jest częścią standardowej biblioteki Ruby i przedefiniuje zachowanie, opentak aby można było otworzyć adres URL, a także plik lokalny. Zwraca Fileobiekt, więc powinieneś być w stanie wywołać metody takie jak readi 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
źródło
2
Czy istnieje sposób na zwrócenie obiektu pliku, tak jak tutaj, z załącznika ActionMailer?
AnApprentice
9
Wiem, że to jest teraz trochę stare, ale możesz też zrobić:content = open("http://example.com").read
Automatico
6
Możesz, ale zrobienie tego poza zamknięciem w ten sposób spowoduje, że deskryptor pliku będzie otwarty. Może to stanowić problem w przypadku niektórych zastosowań.
Aaron Hinni,
19
pamiętaj, że open-urinie będzie przesyłany strumieniowo pliku, więc nie możesz odczytać jego pierwszych 4k. w momencie otwarcia open-uriodczyta do pamięci cały plik.
zed_0xff
3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Jeśli szukasz sposobu na ubezpieczenie to nie dzwonię Kernal.open. Również omija zasady bezpieczeństwa Rubocop.
newdark-it