Откройте поток ввода-вывода из локального файла или URL-адреса


105

Я знаю, что есть библиотеки на других языках, которые могут принимать строку, содержащую либо путь к локальному файлу, либо URL-адрес, и открывать ее как читаемый поток ввода-вывода.

Есть ли простой способ сделать это в рубине?

Ответы:


225

open-uri является частью стандартной библиотеки Ruby, и он переопределит поведение, openчтобы вы могли открывать URL-адрес, а также локальный файл. Он возвращает Fileобъект, поэтому вы должны иметь возможность вызывать такие методы, как readи readlines.

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

2
Есть ли способ вернуть файловый объект, как здесь, из вложения ActionMailer?
AnApprentice

9
Знайте, что это уже немного устарело, но вы также можете сделать:content = open("http://example.com").read
Automatico

6
Вы можете, но если вы сделаете это вне такого закрытия, файловый дескриптор останется открытым. Это может быть проблемой для некоторых пользователей.
Аарон Хинни

19
обратите внимание, что потоковая передача файла open-uriне выполняется, поэтому вы не можете прочитать первые 4 КБ. прочитает в память весь файл в момент открытия. open-uri
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Если вы ищете способ застраховаться, не звоните Kernal.open. Также обходит правила безопасности rubocop.
newdark-it
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.