我正在通过Ajax以块的形式上传文件。目前,每块重量为50 KiB。
在上传过程中,我有以下信息:
我还可以添加几乎所有可能需要的东西来完成这个,我想到的不是依赖上传速度,而是依靠平均的块上传时间,这是我目前破坏的公式:
(averageUplTime * ((FileSize / ChunkSize) ) - AmountOfChunks) / 1000
它实际上几乎可以工作,我可以在数字之间看到它以几乎正确的方式递减,但我得到这些长数9.16174
并且我无法找到正确的方法来做到这一点。
答案 0 :(得分: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值进行平均),可以获得更好的结果。