有没有人知道在下载文件时从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)
我扩展了@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"以重写该行.