我从网址下载文件:
url = "https://aws-file-url.com/bucket/large-file.mov"
path = Rails.root.join("tmp", SecureRandom.hex(12).to_s + Time.now.to_i.to_s)
IO.copy_stream(url, path)
使用IO.copy_stream
下载文件需要时间,我希望能够跟踪已下载的金额并有总下载量,以便我可以获得一定百分比或等值的内容。
有办法做到这一点吗?
答案 0 :(得分:0)
您可以使用OpenURI::OpenRead。它的open()方法有两个lambda,即:content_length_proc和:progress_proc,它们提供了您所要的内容。
例如,如果您需要进度条:
require 'open-uri'
require 'progressbar' # you must install: gem install progressbar
pbar = nil
open(url,
:content_length_proc => lambda { |t|
if t && 0 < t
pbar = ProgressBar.create(
title: "Some download title for progress bar",
total:t,
progress_mark:'█'.encode('utf-8')
)
end
},
:progress_proc => lambda {|s|
pbar.progress = s if pbar
}
) { |f|
IO.copy_stream(f, path)
}
请注意,此代码没有错误处理。
希望它能解决您的问题!