2009-11-25 17 views
10

ruby​​のNet :: FTPライブラリからファイルをダウンロード中に状態を更新する方法を知っている人はいますか?私はリモートFTPサーバからファイルをダウンロードする際に残っているパーセンテージの進行状況を示すWebインターフェイスを実装しようとしています。今後の参考のためにRuby Net :: FTPプログレスバー

答えて

34

- 私は解決策につまずい:私は100ドット進行に少しノイズが少ない進歩のための@ smnirvenの優れたアプローチに基づいて構築

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

これは古いスレッドですが、あなた自身が答えを与えることができます。よくやった。 –

+0

私は同意します、この例のおかげで – chrisan

0

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 

出力:

4

@smnirvenと@theoretickの回答を拡張して固定siを作成しました

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 

出力に含ま:この例でのキーがプリント「である

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%[==============================>] 

\それはあなたがどのように完全な進展がある視覚的なアイデアを持つことができるように完了するといっぱいになるぜプログレスバーr "を使用して行を書き換えます。

関連する問題