我一直在使用 uploadify 处理文件上传脚本,该脚本计算上传的剩余时间。Uploadify 提供了一个名为 onUploadProgress 的回调,它为我提供了有关当前上传的一些信息。
我有这个工作在一定程度上,但问题在于野生动物园。剩余时间脚本不准确,它会在大文件上剩余 10 到 20 分钟之间跳跃 - 这是可以接受的。在 Safari 上,偏差是巨大的,它会在剩余 0 到 300 分钟之间移动,即使是小的上传也是如此。
我的想法是通过将每个进度(总计)的 timeLeft 值相加来平均剩余时间,并将值增加 1(numberofpolls),因此可以通过 total/numberofpolls 计算平均值。
下面的代码包含 CalcTime 的函数和 onUploadProgress 的回调。
var total = 0;
var numberofpolls = 0;
var avg = 0;
function CalcTime(newTime)
{
total += parseFloat(newTime);
numberofpolls++;
avg = (total / numberofpolls);
return avg;
}
...
'onUploadProgress' : function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal) {
// remaining amount of bytes in upload
var remaining = totalBytesTotal - totalBytesUploaded;
// approx amount of time left.
var timeLeft = (((remaining - (Date.now() - timeStarted) * this.queueData.averageSpeed) / this.queueData.averageSpeed) /60)/1000;
var tmp_time = CalcTime(timeLeft );
if (tmp_time<=1)
var suffix = "Less than a minute remaining";
else
var suffix = ~~(tmp_time)+ ' minute(s) remaining';
}
问题不在于 timeLeft 的计算 - 因为这在以前有效,问题是通过 CalcTime 平均 timeLeft 的值。如果有更好的方法来阻止 safari 这样做,或者有更好的计算方法,我们将不胜感激。
提前致谢。