Có ai biết cách cập nhật trạng thái từ thư viện Net :: FTP của Ruby trong khi tải xuống tệp không? Tôi đang cố gắng để thực hiện một giao diện web cho thấy một thanh tiến trình cho phần trăm còn lại khi tải xuống một tập tin từ một máy chủ FTP từ xa.Ruby Net :: Thanh tiến trình FTP
10
A
Trả lời
34
Để tham khảo trong tương lai - tôi stumbled khi một giải pháp:
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
tôi xây dựng trên cách tiếp cận tuyệt vời @ smnirven cho một chút tiến bộ ít ồn ào với 100-dot tiến triển:
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
đầu ra:
[progress] Downloading CBSA boundaries...
..........................................................................
..........................
[progress] Finished!
4
Tôi đã mở rộng câu trả lời được đưa ra bởi @smnirven và @theoretick để tạo một si cố định thanh tiến trình ze lấp đầy khi nó hoàn thành để bạn có thể có một ý tưởng trực quan về cách hoàn thành tiến độ là:
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%[==============================>]
Chìa khóa với ví dụ này là print "\ r "để viết lại dòng.
Các vấn đề liên quan
- 1. Thanh tiến trình dọc
- 2. thanh tiến trình wxPython
- 3. Thanh tiến trình cho AVAssetExportSession
- 4. Thanh tiến trình Android DialogFragment
- 5. Cách tạo thanh tiến trình
- 6. Thanh tiến trình .NET trên thanh tác vụ trên windows 7
- 7. align thanh tiến trình và thanh tiến trình khởi động twitter
- 8. cách sử dụng thanh tiến trình trong ứng dụng iphone
- 9. thanh tiến trình Android với đệm
- 10. Django-Cần tây thanh tiến trình
- 11. Thanh tiến trình với 2 Chỉ số
- 12. file thanh tiến trình tải lên
- 13. Thanh tiến trình tùy chỉnh trong Android?
- 14. thanh tiến trình khi sử dụng knitr
- 15. Android cú pháp kiểu thanh tiến trình
- 16. Tuyên bố thanh tiến trình khai báo
- 17. Điền tiến trình thanh - Thực hiện jQuery
- 18. Thanh tiến trình dòng lệnh trong Java
- 19. Thanh tiến trình trong VBA Excel
- 20. Thanh tiến trình Android trên ImageView
- 21. Thanh tiến trình với PHP & Ajax
- 22. Tạo thanh tiến trình tệp trong PHP
- 23. Thanh tiến trình Windows 98 kiểu
- 24. Chỉ hiển thị thanh tiến trình wget?
- 25. Thanh tiến trình Android trong nút
- 26. Tạo Thanh tiến trình trong Liferay
- 27. Thanh tiến trình thanh tác vụ Windows 7 trong Java
- 28. ruby FTP chế độ thụ động lỗi
- 29. Chuyển đổi màu của thanh tiến trình theo lập trình
- 30. Bạn gọi thanh tiến trình lặp là gì?
Đây là một chủ đề cũ, nhưng, bạn có thể tự thưởng cho mình câu trả lời. Làm tốt lắm. –
Tôi đồng ý, cảm ơn ví dụ này – chrisan