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?

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 }

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.