Ruby Net :: FTP进度条

smn*_*ven 11 ruby ftp

有没有人知道在下载文件时从ruby的Net :: FTP库获取状态更新的方法?我正在尝试实现一个Web界面,该界面显示从远程ftp服务器下载文件时剩余百分比的进度条.

smn*_*ven 36

为了将来的参考 - 我偶然发现了一个解决方案:

filesize = ftp.size(filename)
transferred = 0
p "Beginning download, file size: #{filesize}"
ftp.getbinaryfile(filename, "#{SOURCE_IMPORT_DIRECTORY}/#{filename}", 1024) { |data|
  transferred += data.size
  percent_finished = ((transferred).to_f/filesize.to_f)*100
  p "#{percent_finished.round}% complete"
}
ftp.close
Run Code Online (Sandbox Code Playgroud)


mos*_*s04 5

我扩展了@smnirven和@theoretick给出的答案,创建了一个固定大小的进度条,它在完成时填满,以便您可以直观地了解进度的完整程度:

def getprogress(ftp,file,local_path)
  transferred = 0
  filesize = ftp.size(file)
  ftp.get(file, local_path, 1024) do |data|
    transferred += data.size
    percent = ((transferred.to_f/filesize.to_f)*100).to_i
    finished = ((transferred.to_f/filesize.to_f)*30).to_i
    not_finished = 30 - finished
    print "\r"
    print "#{"%3i" % percent}%"
    print "["
    finished.downto(1) { |n| print "=" }
    print ">"
    not_finished.downto(1) { |n| print " " }
    print "]"
  end
  print "\n"
end
Run Code Online (Sandbox Code Playgroud)

输出继电器:

Executing gather for: ruby
Going to public ftp - ftp.ruby-lang.org
File list for /pub/ruby/2.0/:
ruby-2.0.0-p647.tar.gz

Downloading:    ruby-2.0.0-p647.tar.gz
100%[==============================>]
Run Code Online (Sandbox Code Playgroud)

此示例的关键是打印"\ r \n"以重写该行.