Я знаю, что на других языках есть библиотеки, которые могут взять строку, содержащую либо путь к локальному файлу, либо URL-адрес, и открыть его как читаемый поток ввода-вывода.
Есть ли простой способ сделать это в ruby?
open-uri является частью стандартной библиотеки Ruby, и она переопределит поведение open, чтобы вы могли открыть как URL, так и локальный файл. Он возвращает объект File, поэтому вы должны иметь возможность вызывать такие методы, как read и readlines.
open
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 }
Для URL вы можете захотеть rest-client , из его документа
Если вы хотите передавать данные из ответа в файл по мере его поступления, а не полностью в памяти, вы также можете передать RestClient :: Request.execute параметр: block_response, в который вы передаете block / proc.This Блок получает необработанный неизмененный объект Net :: HTTPResponse из Net :: HTTP, который можно использовать для потоковой передачи непосредственно в файл при получении каждого чанка.
File.open('/some/output/file', 'w') {|f| block = proc { |response| response.read_body do |chunk| f.write chunk end } RestClient::Request.execute(method: :get, url: 'http://example.com/some/really/big/file.img', block_response: block) }