Отслеживание хода загрузки файла в ActionScript 3 - PullRequest
1 голос
/ 28 мая 2010

Я пытаюсь отследить ход загрузки файла в AS3, и у меня странное поведение. Когда я выбираю файл и загружаю его, прогресс мгновенно достигает 100%, даже если размер файла составляет 10 или более мегабайт, но он еще не закончен. Событие onComplete наступает от 30 секунд до нескольких минут (в зависимости от размера файла), когда файл действительно завершил загрузку. Я проверял это локально и на сервере, поведение такое же. Кто-нибудь еще испытывал это? Очень расстраивает ...

В противном случае файл загружается нормально. Код прост:

myFileReference.addEventListener(ProgressEvent.PROGRESS, onUploadProgress);

function onUploadProgress(e:ProgressEvent) {
    var pctDone:Number = (e.bytesLoaded / e.bytesTotal) * 100;
    trace(pctDone);
}

Ответы [ 4 ]

1 голос
/ 11 июля 2010

Ну, я нашел этот вопрос, когда столкнулся с подобной проблемой. У меня есть апплет загрузки нескольких файлов. Я наблюдаю за двумя событиями: каждый файл в отдельности и общее количество файлов. Последний работает, как и ожидалось, потому что это делается вручную, но первый отказывает точно так же. Добавление следа показывает неприятное поведение:

protected function fileUploadProgress(event:ProgressEvent):void{
    var bytesTotal:uint = event.bytesTotal;
    var bytesLoaded:uint = event.bytesLoaded;
    progressBar_current.setProgress(bytesLoaded, bytesTotal);
    trace(bytesLoaded+ " / "+bytesTotal); 
}

327680 / 462357 
462357 / 462357 
398304 / 398304 
441478 / 441478 
457319 / 457319 
478448 / 478448

Моя загрузка составляет около 500 кбит / с, поэтому каждый файл занимает несколько секунд, но, как вы можете видеть во всех случаях, кроме первого файла, запускается только одно событие на файл и сразу после его запуска, и при 100%.

ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ: Обнаружено! После деинсталляции AVG Antivirus событие прогресса работало ТОЧНО так, как должно. Некоторые люди с NOD также испытывали те же проблемы. Так что, похоже, это проблема приложений AV / Firewall. В AVG Free нет брандмауэра, но загрузка все равно прерывается.

1 голос
/ 07 июня 2010

Не думаю, что вам нужно умножать на 100. Если я правильно помню, индикатор выполнения в AS3 изменяется от 0 до 1,0

0 голосов
/ 04 июня 2010

Единственное, о чем я могу думать, это то, что e.bytesTotal может быть неправильно инициализирован. Может быть, попробуйте отследить это, чтобы убедиться в этом?

Если это так, я подозреваю, что проблема заключается в любой серверной технологии, на которую вы передаете данные файла (т. Е. К тому, к чему ведет URL, который вы передаете myFileReference.upload). Также обратите внимание, что FileReference.upload имеет два необязательных параметра, которые могут вам помочь, хотя, учитывая то, что я знаю о них, я не думаю, что они имеют много общего с этой проблемой.

Удачи!

http://livedocs.adobe.com/flex/3/langref/flash/net/FileReference.html#upload%28%29

0 голосов
/ 02 июня 2010

Ваш код выглядит нормально! Я не вижу причин, почему он не должен работать так, как ожидалось.

Добавляете ли вы прослушиватель событий до или после вызова метода browse () для ссылки на файл? Попробуйте поменять порядок и посмотрите, повезет ли вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...