PDA

Просмотр полной версии : Не работает ProgressEvent класса MultipartURLLoader


Makkssimka
11.06.2013, 19:39
Доброго времени суток! В общем такая байда загружаю файлы с помощью MultipartURLLoader конец кода:

loader.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.addEventListener(Event.COMPLETE, onCompletes);
loader.load('http://upload.ro/up/bin-debug/upload.php');


И обработчики событий:

private function onCompletes(event:Event):void{
panelProg.title = 'Идет сохранение изображения...';
}

private function onProgress(event:ProgressEvent):void{
trace(event.bytesTotal);
}


А вопрос в том почему onCompletes работает, файлы загружаются, а onProgress не работает?

GBee
11.06.2013, 19:50
Вроде сервер должен уметь, если нет, то работать не будет, но это я на уровне слухов.

belv
11.06.2013, 22:19
Я тоже делал прелоадер с помощью прослушивания ProgressEvent , но он срабатывает по истечению некоторого времени . Вот пример http://belv.hdd1.ru/poselok
Почему так , я не понял.
Если у кого есть мысли по этому поводу , интересно узнать.

Wolsh
11.06.2013, 23:08
Что такое MultipartURLLoader? Он точно генерит ProgressEvent.PROGRESS?

belv, ну видимо потому что первый кадр что-то да весит, да? А пока он не загрузится, прелоадер не начнет отображаться. Так что он никогда не начнется с нуля, а с того процента, который вес первого кадра составляет от веса всего файла swf.

Makkssimka
11.06.2013, 23:20
Это класс, для загрузки, порекомендовали на одном из форумов, вот исходники в архиве:

belv
11.06.2013, 23:24
Я думал , что ProgressEvent работает от загрузки общего веса swf , то есть начинает работать еогда начинается загрузка байтов и ему все равно на внутреннюю структуру файла.

Wolsh
11.06.2013, 23:40
А кто на него подписан-то, когда еще не загрузился самый первый класс? Кто его отображать должен?)))

belv
11.06.2013, 23:48
Да , еще к слову в первом кадре , кроме текстового поля отображающего загрузку ничего нет и стоит стоп ,когда загрузка завершается переходит на 2 кадр.

Wolsh
12.06.2013, 00:01
Ну, у меня прогресс начинается с 5%, это очень даже неплохо. Когда сам файл меньше, легко может начинаться и с 25%, и больше.

Makkssimka, так у Вас аплоад НА сервер? Тогда конечно, это обычное дело. Сервер может вообще ни о чем не отчитываться, кроме окончания загрузки. Я как-то получал событие на 52%, это был праздник.

belv
12.06.2013, 00:08
Да я и не говорю , что это плохо , просто не понятно как он срабатывает.По идее если файл будет к примеру 200 кбвйт , то он и не сработает , что возможно и происходит у автора .

Wolsh
12.06.2013, 01:09
Не надо путать прелоадер и лоадер, а тем более аплоадер.

belv
12.06.2013, 01:48
Согласен , что эта строка
loader.addEventListener(ProgressEvent.PROGRESS, onProgress);
должна выглядеть так:
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
Суть события на загрузку байтов не меняется ,будь то прелоадер или лоадер.
Еще у автора Event.COMPETE срабатывает , не знаю конечно может ли он отслеживать событие файла который выгружается на сервер.

Wolsh
12.06.2013, 02:06
"loader" это не Loader, и даже не URLLoader (у которого нет LoaderInfo), и даже не его наследник. Это сторонний класс MultipartURLLoader, читайте внимательней. И он да, передиспатчивает события внутреннего URLLoadera от своего имени, в том числе и события прогресса. Вот только сервер не обязан сообщать о прогрессе, а плеер о нем понятия не имеет при аплоаде. Только сервер знает, сколько байт он принял. Если сервер молчит — события нет. Но об окончании операции сервер обязан сообщить в любом случае.

belv
12.06.2013, 02:29
Теперь понятно,спасибо за информацию. Но все же странно ведет себя ProgresEvent , начинает отслеживать , когда вздумается .