【问题标题】:Progress-bar for Ruby UploadRuby 上传的进度条
【发布时间】:2014-10-31 11:22:26
【问题描述】:

我有一个执行分块上传的 Dropbox CLI api,使用 ruby-progressbar 指示上传进度。

当文件小于 4MB(分块上传的默认块大小)时它可以正常工作,但它有任何问题:

from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ruby-progressbar-1.2.0/lib/ruby-progressbar/components/progressable.rb:45:in `progress='
from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ruby-progressbar-1.2.0/lib/ruby-progressbar/base.rb:138:in `with_progressables'
from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ruby-progressbar-1.2.0/lib/ruby-progressbar/base.rb:45:in `block in progress='
from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ruby-progressbar-1.2.0/lib/ruby-progressbar/base.rb:148:in `with_update'
from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ruby-progressbar-1.2.0/lib/ruby-progressbar/base.rb:45:in `progress='
from /Users/peterso/Projects/slipsquare/lib/slipsquare/middleware/chunked_upload.rb:20:in `block in call'
from /opt/rubies/2.0.0-p451/lib/ruby/gems/2.0.0/gems/dropbox-api-petems-1.1.0/lib/dropbox-api/client/files.rb:50:in `chunked_upload'

我假设我对总计算做了一些愚蠢的事情,即使上传已达到完整大小并完成,我仍在添加进度条的总数。

但是我已经看了一段时间了,我似乎无法找到一种从栏获取当前进度并执行“如果 progressbar.current_size + offset > total,完成进度条”的方法。

代码如下所示:

file_name = env['chunked_upload_file_name']
contents  = File.open(env['chunked_upload_file_name'])
total_size = File.size(env['chunked_upload_file_name'])

say "Total Size: #{total_size} bytes"
upload_progress_bar = ProgressBar.create(:title => "Upload progress",
  :format => '%a <%B> %p%% %t',
  :starting_at => 0,
  :total => total_size)

response = env['dropbox-client'].chunked_upload file_name, contents do |offset, upload|
  upload_progress_bar.progress += offset
end

【问题讨论】:

    标签: ruby progress-bar


    【解决方案1】:

    您在每次迭代中将当前的offset 添加到progress。想象一下,你有一个 10K 的文件并将其分成 10 个块上传。在第一次迭代中,我们的offset0,接下来是1,第三次是2,然后是3。由于您总结了offsets,您的progress 将显示60%,尽管它只完成了40%

    不要将offset 添加到progress,只需将progress 设置为当前的offset

    upload_progress_bar.progress = offset
    

    或者更正确,因为偏移量告诉在当前块上传之前上传了什么。

    upload_progress_bar.progress = offset + default_chunk_size
    

    【讨论】:

    • 哇,我不敢相信我不只是把偏移量当作进度,现在感觉很傻。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多