Ruby上传的进度条

Ruby上传的进度条,ruby,progress-bar,Ruby,Progress Bar,我有一个Dropbox CLI api,它可以执行分块上传,并使用作为上传进展情况的指示器 当文件小于4MB(分块上载的默认分块大小)时,它可以正常工作,但如果超过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/rub

我有一个Dropbox CLI api,它可以执行分块上传,并使用作为上传进展情况的指示器

当文件小于4MB(分块上载的默认分块大小)时,它可以正常工作,但如果超过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'
我假设我在总计算中做了一些愚蠢的事情,即使上传达到完整大小,我仍然在添加进度条的总

但是我已经看了一段时间了,我似乎找不到一种方法来从进度条中获取当前进度并执行“If progressbar.current_size+offset>total,finish progressbar”

代码如下所示:

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
file\u name=env['chunked\u upload\u file\u name']
contents=File.open(env['chunked\u upload\u File\u name'])
total_size=File.size(env['chunked_upload_File_name'])
说“总大小:#{Total_Size}字节”
upload\u progress\u bar=ProgressBar.create(:title=>“上传进度”,
:格式=>'%a%p%%%t',
:从=>0开始,
:total=>total_size)
response=env['dropbox-client']。分块上传文件名,内容不做偏移,上传|
上传进度条。进度+=偏移量
结束

在每次迭代中将当前的
偏移量添加到
进度中。假设您有一个10K文件,并将其分10块上传。在第一次迭代中,我们的
偏移量
0
,在下一次
1
,在第三次
2
,然后
3
。由于您汇总了
偏移量
,您的
进度
将显示
60%
,尽管它只显示了
40%

不要将
偏移量添加到
进度
,只需将
进度
设置为当前的
偏移量

upload_progress_bar.progress = offset
或者更正确,因为偏移量告诉我们在上载当前块之前上载了什么

upload_progress_bar.progress = offset + default_chunk_size

哇,我真不敢相信我不只是想做补偿作为进步,现在感觉很傻。谢谢!:)