2012-11-24 186 views
1

我通過Ajax以塊的形式上傳文件。目前,每塊大小爲50 KiB。計算剩餘下載時間

在上傳過程中,我有以下信息:

  • 文件大小的塊的
  • 金額
  • 時間開始
  • 經過多久才上傳在毫秒當前塊

我也可以添加幾乎任何可能需要完成此任務,我想到的是不依靠上載速度,更要依靠平均塊上傳時間,這是我目前的破公式:

(averageUplTime * ((FileSize/ChunkSize)) - AmountOfChunks)/1000 

它實際上差不多的作品,我可以數字是,它的下降幾乎在正確的方式之間看到的,但我得到這些長數字9.16174,我無法找到正確的方法來做到這一點。

+2

什麼問題?你只是想要四捨五入的數字? – MikeSmithDev

+0

@MikeSmithDev沒有公式是不正確的,我希望有人能找出更好的公式 – Linas

回答

4

假設startTime是因爲毫秒爲單位的時間戳,這應該工作:

var elapsedTime = (new Date().getTime()) - startTime; 
var chunksPerTime = currentChunk/elapsedTime; 
var estimatedTotalTime = amountOfChunks/chunksPerTime; 
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime)/1000; 

var withOneDecimalPlace = Math.round(timeLeftInSeconds * 10)/10; 

這僅僅是「準確」只要上傳速度不會波動很大。通過僅考慮最後的X塊來計算chunksPerTime(並對這些的最後Y值進行平均),您可以獲得更好的結果。

+0

非常感謝,它99%準確!我正在這四個小時工作:D – Linas

+0

@Linas不客氣。如果現在還不清楚爲什麼這會起作用,那就問。 – phant0m