如何从链接下载文件,同时获取下载进度以显示它?
从非常小的我知道open-uri和typhoeus gem(我使用两者)管理下载internaly,我不知道如何从他们那里获得下载进展。
我想我正在寻找的是一种暂停下载的方式,并在每次收到数据包时获得更新值的进度,但我不知道如何继续。
我还可以使用其他宝石?如果是,哪一个和为什么?
答案 0 :(得分:3)
您需要将其作为一个分块请求来执行,如果您使用其高级API(如open(uri).read
),这就像open-uri这样的库在幕后执行。
基于https://www.ruby-forum.com/topic/170237的未经测试的示例:
u = URI.parse(uri)
s = ""
progress = 0
Net::HTTP.start(u.host, u.port) do |http|
http.request_get(u.path) do |response|
response.read_body do |chunk|
s << chunk
progress += chunk.length
puts "Downloaded #{progress} so far"
end
end
end
puts "Received:\n#{s}"