Загрузка нескольких файлов одновременно с помощью Flex

Я работаю над гибким загрузчиком, где пользователь может выбрать несколько файлов.

Он отлично работает, когда файлы загружаются в очередь (по одному), однако, как только я пытаюсь загрузить 2 файла одновременно, у меня возникают проблемы.

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

Есть ли проблема с вызовом .upload одновременно для нескольких файлов во Flex?


person David    schedule 03.02.2010    source источник
comment
проверьте здесь , также это пример   -  person baybora.oren    schedule 02.08.2010


Ответы (5)


К сожалению, это ограничение браузера: 2 (в зависимости от браузера) активных соединений на хост. Это означает, что одновременно будут активны только 2 загрузки, а другая будет поставлена ​​в очередь. Теперь это обычно не было бы проблемой, но когда загружаемые файлы довольно велики, время других загрузок истекает, даже если они не начались. Существует обходной путь использования субдоменов через каждые 2 загрузки (upl1.mydomain.com, upl2.mydomain.com), который я не смог протестировать, но он должен сработать.

Ссылки: http://anirudhs.chaosnet.org/blog/2008.06.17.html и http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/ (к которому вы можете перейти по первой ссылке).

Кроме того, вы, вероятно, не сможете поставить загрузку в очередь во флэш-памяти, потому что модель безопасности требует, чтобы метод загрузки (из FileReference) вызывался в результате щелчка мыши.

person bug-a-lot    schedule 04.02.2010
comment
Вау, очень интересные статьи. Я не знал, что такие ограничения все еще существуют в браузерах сегодня ... Что касается помещения файлов в очередь, это, кажется, работает нормально, проходя через FileReferenceList. - person David; 04.02.2010
comment
Обновление: я немного поковырялся, и ограничение по умолчанию для Firefox 3.0+ равно 6. Поскольку я использовал Firefox 3.5 для тестирования (и я дважды проверил в about:config, что ограничение на подключение равно 6), я снова не уверен, что проблема в том. - person David; 04.02.2010
comment
Да, браузеры нового поколения, кажется, имеют максимальное ограничение на количество подключений 6. Я изменил это число на 8 и не смог загрузить больше 4. Как в IE, так и в Firefox, поэтому я думаю, что есть еще ограничение на ОС. Кроме того, изначально в Firefox у меня было только 2 активных загрузки со значением по умолчанию 6. Возможно, это ошибка? - person bug-a-lot; 04.02.2010
comment
После обновления лимита подключений IE7 до 12 я заметил, что загрузка файлов началась (все они были завершены выше 0%), но прогресс не был достигнут более чем для одного файла за раз. Я думаю, что это восходит к проблеме того, как Flex обрабатывает несколько загрузок одновременно (или, скорее... как он их не обрабатывает...) - person David; 04.02.2010
comment
Ну, в зависимости от скорости вашего соединения и того факта, что ваши визуальные обновления происходят в том же потоке, что и обработка, я думаю, это может выглядеть так. Я реализовал обходной путь поддомена для проекта, над которым я работаю, и он сотворил со мной чудеса. - person bug-a-lot; 22.03.2010

У меня нет прямого ответа на ваш вопрос, но на ум приходит загрузчик Gmail. Он использует swfupload (обновлено ссылка), которая является открытым исходным кодом, поэтому вы, вероятно, сможете понять ее из исходного кода.

В этом ответе.

person Yoni    schedule 03.02.2010

Еще один способ имитации многозадачности — загрузка/выгрузка по частям и использование callLater() для последовательного выполнения. Это было бы повторением ранней совместной многозадачности Windows.

person MonoThreaded    schedule 16.03.2010

Проблема связана с моделью, в которой Flex подключается к серверной части. С HttpService и Remoting клиенты Flex открывают Http-соединение с сервером. Если вы подключаетесь к тому же сервлету/службе на сервере, он будет использовать то же соединение и может столкнуться с проблемами.

Для простого теста попробуйте создать два экземпляра одного и того же сервлета и отправить запросы на загрузку на 2 сервлета для 2 загрузок. Он должен работать.

person Kapil Viren Ahuja    schedule 07.06.2010

Создание сценария загрузки в качестве класса загрузки может помочь. Я имею в виду, если ваш сценарий загрузки находится в php или asp, тогда создайте класс этого сценария, чтобы каждый запрос соответствовал каждому уникальному объекту, и мы могли загружать файлы одновременно...

person Muhammad Irfan    schedule 27.07.2010