2016-11-21 130 views
0

基本上我創建了一個簡單的項目,用戶可以通過拖放將文件上傳到服務器。只需通知用戶需要多長時間才能完成我需要顯示上傳速度的流程。我發現這個問題estimate users' upload speed without direct permission但它完全不適合我的項目。如何檢查JavaScript中的上傳速度?

因此,這裏是我的代碼我如何上傳文件:

function upload(file){ 
    var xhr=new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 

     if (xhr.readyState == XMLHttpRequest.DONE) { 
       alert(xhr.responseText); 
     } 
    } 

    xhr.upload.addEventListener('progress', function(e){ 
    $('.upgbar').show(); 
    $('.trkpb').css('width', (e.loaded/e.total*100)+"%"); 

    var loaded = e.loaded; 
    var total = e.total; 
    var progressValue = Math.round((e.loaded/e.total) * 100); 

    var seconds_elapsed = (new Date().getTime() - started_at.getTime())/1000; var bytes_per_second = seconds_elapsed ? loaded/seconds_elapsed : 0 ; 
    var Kbytes_per_second = bytes_per_second/1000 ; 
    var remaining_bytes = total - loaded; 
    var seconds = seconds_elapsed ? remaining_bytes/bytes_per_second : 'calculating' ; 
    $('.time_re').text("Time Remaining: "+seconds.charAt(0)); 
    }, false); 

    xhr.open('post','../uploadtostack',true); 
    xhr.setRequestHeader('X-File-Name',file.name); 
    xhr.setRequestHeader('x-File-Size',file.size); 
    xhr.setRequestHeader('X-File-Type',file.type); 
    xhr.send(file); 
} 

通過xhr.upload.addEventListener我估計剩餘時間和上傳的數據量,但不知道munipulate這個給我看上傳速度。而如果你可能會爲什麼我的線得到一個錯誤$('.time_re').text("Time Remaining: "+seconds.charAt(0));

TypeError: seconds.charAt is not a function[Learn More]

我會很感激,如果有人能告訴我如何實現在JavaScript中的speechecker || jQuery的。問候

+1

查找文件上傳管理員。您可能會更好地報告已上傳文件*的數量與文件的實際大小。 –

+0

用戶與服務器的連接速度會隨着互聯網連接數量的變化而變化。在我的頭頂上有:用戶的互聯網連接,你的服務器的互聯網連接,當前在你的網絡服務器上的負載(如果它陷入了不能快速處理),用戶在他們的計算機上的CPU開銷,..等等。 @Mike C建議對最終用戶更可靠和有價值。 – Adrian

+0

我認爲這些問答提供了很好的洞察,瞭解它如何完成:http://stackoverflow.com/questions/21027888/calculate-upload-speed和http://stackoverflow.com/questions/15472251/estimate-users-upload無需直接許可 - 檢查XHR是否成功。 –

回答

-1

您可以嘗試發送一個定義的大小文件之前,並計算估計時間與此。 示例:demo file.txt>大小10k 1秒 另一個:filetoupload.txt>大小20k預計時間2秒

+0

爲什麼我需要發送一個文本文件,並檢查速度不會與我的正常上傳文件? –

+0

因爲javascript不能給你這個信息,但你也可以上傳第一個文件,並估計上傳時間 –

+0

如果上傳速度上升或下降,而上傳真實的實際文件呢? –