2

我正在通过 Ajax 分块上传文件。目前,每个块重 50 KiB。

在上传过程中,我有以下信息:

  • 文件大小
  • 块数
  • 时间开始
  • 以毫秒为单位上传当前块需要多长时间

我还可以添加完成此操作所需的几乎所有内容,我想到的不是依赖上传速度,而是依赖平均块上传时间,这是我目前的错误公式:

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

它实际上几乎可以工作,我可以在数字之间看到它以几乎正确的方式减少,但我得到了这些长数字9.16174,我无法找出正确的方法来做到这一点。

4

1 回答 1

7

假设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;

只要上传速度波动不大,这只是“准确”的。chunksPerTime通过仅考虑要计算的最后 X 个块(并对这些块的最后 Y 值取平均值),您可以获得更好的结果。

于 2012-11-24T13:42:47.700 回答