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

サーバーでのアップロード速度を監視してから、そのデータをクライアントに送り返すことができます。この手法は、ajaxファイルのアップロードフォームでよく使用されます。

于 2010-06-28T21:01:04.157 に答える
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秒間隔で移動したバイト数が計算されます。

編集:

間隔を1000msより少し小さくして、最後のnサンプルの平均速度を計算することをお勧めします。これにより、ユーザーに表示される数は、おそらく現在よりも安定しているように見えます。スピードArray.push()最新のサンプルを作成します。.shift()精度をあまり失わないように、最も古いサンプルを削除するために使用します。試行錯誤することで、保持するサンプルの数とそれらを取得する頻度をより正確に把握できます。

于 2010-06-29T02:24:50.137 に答える