Qualcuno sa di come ottenere un aggiornamento di stato dalla libreria Net :: FTP di Ruby durante il download di un file? Sto cercando di implementare un'interfaccia web che mostra una barra di avanzamento per la percentuale rimanente durante il download di un file da un server FTP remoto.Ruby Net :: Barra di avanzamento FTP
10
A
risposta
34
Per riferimento futuro - mi sono imbattuto su una soluzione:
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
0
ho costruito su di @ smnirven eccellente approccio per un po 'il progresso meno rumoroso con 100-dot progressione:
filesize = ftp.size(filename)
transferred = 0
notified = false
ftp.getbinaryfile(filename, full_local_path, 1024) do |data|
transferred += data.size
percent_finished = (((transferred).to_f/filesize.to_f)*100)
if percent_finished.to_s.include?('.0')
print "." if notified == false
notified = true
else
notified = false
end
end
ftp.close
uscita:
[progress] Downloading CBSA boundaries...
..........................................................................
..........................
[progress] Finished!
4
Ho ampliato le risposte fornite da @smnirven e @theoretick per creare un si fisso barra di avanzamento ze che si riempie come si completa in modo che si può avere un'idea visiva di come completare il progresso è:
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
ouput:
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%[==============================>]
La chiave con questo esempio è la stampa "\ r "per riscrivere la linea.
Questa è una discussione precedente, ma è possibile assegnarsi la risposta. Buon lavoro. –
Sono d'accordo, grazie per questo esempio – chrisan