Je sais qu'il existe des bibliothèques dans d'autres langues qui peuvent prendre une chaîne contenant un chemin d'accès à un fichier local ou une URL et l'ouvrir en tant que flux lisible IO.
Y at-il un moyen facile de faire cela en rubis?
open-uri fait partie de la bibliothèque Ruby standard et redéfinira le comportement de open
afin que vous puissiez ouvrir une URL, ainsi qu'un fichier local. Il retourne un objet File
, vous devriez donc pouvoir appeler des méthodes telles que read
et readlines
.
require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents = open('http://www.stackoverflow.com') {|f| f.read }
Pour url, vous voudrez peut-être rest-client , à partir de son document
Si vous souhaitez diffuser les données de la réponse dans un fichier tel quel, plutôt que entièrement en mémoire, vous pouvez également passer RestClient :: Request.execute un paramètre: block_response à lequel vous transmettez un bloc/proc Objet Net :: HTTPResponse non modifié de Net :: HTTP, que vous pouvez utiliser pour diffuser directement dans un fichier à la réception de chaque bloc.
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)
}