我一直在使用uploadify处理文件上传脚本,该脚本计算上传的剩余时间。 Uploadify提供了一个名为onUploadProgress的回调函数,它为我提供了有关当前上传的一些信息。
我有一定程度的工作,但问题出在safari上。剩余时间的脚本不准确,它会在大型文件中剩余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这样做,或者更好的计算方法,那么任何帮助都会受到赞赏。
提前致谢。