0

我正在使用 FileReference 类的 upload() 方法上传文件。我想显示当前的连接速度,我想知道这样做的好方法是什么。

我目前的技术是每 1 毫秒使用一次计时器,如下所示:

var speed:Function = function(event:TimerEvent):void {
    speed = Math.round((currentBytes - lastBytes) / 1024);
    lastBytes = currentBytes;
}
var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);

并且 currentBytes 被设置到 ProgressEvent.PROGRESS 中。这种技术似乎不精确。我想知道在上传和实时显示时可以使用哪些其他方法来计算上传速度。

欢迎任何想法或意见!

非常感谢,

鲁迪

4

2 回答 2

0

如果该代码块是复制和粘贴,它肯定不会像您预期的那样工作。您声明speed为一个函数,在其中您似乎将其重新定义为一个数字。我很欣赏 Flash IDE 可以让你摆脱粗略的语法,但这样的代码会让你陷入各种麻烦。在编写代码时尽量明确。

尝试这样的事情,替换yourLoader为您分配给上传者的任何标识符:

private var speed:Number = 0;
private var lastBytes:uint = 0;

private function uploadSpeed(event:TimerEvent):void
{
   speed = Math.round((yourLoader.currentBytes - lastBytes) / 1024);
   lastBytes = yourLoader.currentBytes;
}

private var speedTimer:Timer = new Timer(1000);
speedTimer.addEventListener(TimerEvent.TIMER, uploadSpeed);

那应该计算在1 秒间隔内移动了多少字节。

编辑:

您可能希望将间隔设置为略小于 1000 毫秒,并计算最后n 个样本的平均速度。这将使您的用户看到的数字看起来比现在可能更稳定。制作速度Array.push()最新的样品。用于.shift()删除最旧的样本,这样您就不会损失太多的准确性。反复试验将使您更好地了解要保存多少样本以及多久采集一次。

于 2010-06-29T02:24:50.137 回答
0

您可以监控服务器上的上传速度,然后将该数据发送回客户端。这种技术通常用于 ajax 文件上传表单。

于 2010-06-28T21:01:04.157 回答