¿Alguien sabe de una forma de obtener una actualización de estado de la biblioteca Net :: FTP de ruby mientras se descarga un archivo? Estoy intentando implementar una interfaz web que muestre una barra de progreso para el porcentaje restante al descargar un archivo de un servidor ftp remoto.Ruby Net :: FTP Progress Bar
10
A
Respuesta
34
Para referencia futura - yo nos topamos con una solución:
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
he construido en excelente enfoque @ de smnirven para un poco el progreso menos ruidoso con la progresión de 100 puntos:
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
de salida:
[progress] Downloading CBSA boundaries...
..........................................................................
..........................
[progress] Finished!
4
Expandí las respuestas dadas por @smnirven y @theoretick para crear un si fijo barra de progreso ze que se llena a medida que completa para que pueda tener una idea visual de cómo completa el progreso es:
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 clave de este ejemplo es la letra "\ r "para reescribir la línea.
Cuestiones relacionadas
- 1. Ruby Net :: FTP Timeout Threads
- 2. Bootstrap Page Load Progress bar animation
- 3. Ruby Net :: FTP, extraer el nombre de archivo de ftp.list()
- 4. .Net FTP Library
- 5. Carga de FTP usando .NET
- 6. Flowplayer Video Progress Tracking?
- 7. Android Download Progress
- 8. MPMoviePlayerController preload progress
- 9. Flex Multipart Upload Progress
- 10. Python tarfile progress output?
- 11. Anime seekbar progress
- 12. descartar Progress Dialog
- 13. commons-net ftp está cargando archivos dañados
- 14. C#/NET - integración continua y FTP despliegue
- 15. Descargar varios archivos FTP como d * .txt en ruby
- 16. show progress dialog on webview
- 17. Cómo redireccionar address.com/foo/bar a address.com:port/bar con nginx?
- 18. Android ActionBarSherlock Top Bar
- 19. const CFoo & bar() const
- 20. Android Action Bar
- 21. Bootstrap Responsive Nav Bar
- 22. Ruby FTP Separación de archivos de las carpetas
- 23. Cómo agregar capacidades FTP seguras a una aplicación .NET
- 24. Uso de FTP Proxy con apache commons-net
- 25. ftp subir varios archivos sin desconexión utilizando .NET
- 26. Cualquier OSS .Net FTP (cliente) con TLS y SSL?
- 27. ¿Cómo saber si la carga del ftp a través de ruby es exitosa?
- 28. Para foo bar, o no para foo bar: esa es la pregunta
- 29. Windows 8 - Fancy Progress Bars API?
- 30. jQuery Upload Progress y AJAX file upload
Este es un hilo antiguo, pero puede otorgarse la respuesta. Buen trabajo. –
Acepto, gracias por este ejemplo – chrisan