Как загрузить и сохранить двоичный файл по HTTP с помощью Ruby?
URL-адрес http://somedomain.net/flv/sample/sample.flv
.
Я работаю на платформе Windows и предпочитаю не запускать какие-либо внешние программы.
Самый простой способ - это решение для конкретной платформы:
#!/usr/bin/env ruby
`wget http://somedomain.net/flv/sample/sample.flv`
Вероятно, вы ищете:
require 'net/http'
# Must be somedomain.net instead of somedomain.net/, otherwise, it will throw exception.
Net::HTTP.start("somedomain.net") do |http|
resp = http.get("/flv/sample/sample.flv")
open("sample.flv", "wb") do |file|
file.write(resp.body)
end
end
puts "Done."
Изменить: Изменено. Спасибо.
Edit2: Решение, которое сохраняет часть файла при загрузке:
# instead of http.get
f = open('sample.flv')
begin
http.request_get('/sample.flv') do |resp|
resp.read_body do |segment|
f.write(segment)
end
end
ensure
f.close()
end
Пример 3 в документации Ruby's net/http показывает, как загрузить документ по HTTP и вывести файл вместо того, чтобы просто загрузить его в память, заменив puts двоичной записью в файл, например, как показано в ответе Dejw.
Более сложные случаи показаны далее в том же документе.