Лучший способ загрузить несколько файлов из браузера

Я работаю над веб-приложением. Есть одно место, где пользователь может загружать файлы по протоколу HTTP. Существует выбор между классическим управлением загрузки файлов HTML и Java-апплетом для загрузки файлов.

классическая загрузка HTML-файла не велика, потому что вы можете выбрать только один файл за раз, и довольно сложно получить какое-либо указание на прогресс во время фактической загрузки (я, наконец, получил его с помощью таймера, обновляющего индикатор прогресса с данными, извлеченными из сервер через AJAX-вызов). Преимущество: это всегда работает.

С помощью Java-апплета я могу сделать больше вещей: выбрать несколько файлов сразу (даже папку), сжать файлы, получить реальный индикатор выполнения, перетащить файлы на апплет и т. д...
Но есть несколько недостатков:

  • это кошмар, чтобы заставить его работать правильно на Mac Safari и Mac Firefox (спасибо Liveconnect)
  • интерфейс не совсем родной пользовательский интерфейс и некоторые люди замечают, что
  • апплет не так отзывчив, как должен (может быть, моя вина, но все выглядит нормально для меня)
  • есть ошибки в Java UrlConnection класс с HTTPS, поэтому я использую общий HTTP-клиент Apache для фактической загрузки HTTP. Это довольно большой пакет и замедляет загрузку .jar-файл
  • у общего HTTP-клиента Apache иногда возникают проблемы с прокси
  • среда выполнения Java довольно большая

Я некоторое время поддерживал этот Java-апплет, но теперь я сыт по горло всеми недостатками и рассматриваю возможность написания/покупки совершенно нового компонента для загрузки файлов тезисов.

вопрос

Если у вас следующие требования:

  • загрузить несколько файлов легко из браузера, через HTTP или HTTPS
  • сжать файлы, чтобы уменьшить время загрузки
  • загрузить должен работать на любой платформе, с родной UI
  • должен иметь возможность загружать огромные файлы, по крайней мере до 2 ГБ
  • у вас есть карт-бланш на технологию

какую технологию / compontent вы использовали бы?


изменить :

  • перетаскивание файлов на компоненте было бы большим плюсом.
  • похоже, что есть много проблем, связанных с ошибками с Flash Player (swfupload известные проблемы). Правильный Mac поддержка и загрузка через прокси с аутентификацией-это параметры, без которых я не могу обойтись. Это, вероятно, исключит все параметры на основе Flash: - (.
  • Я исключаю все параметры HTML / Javascript-only, потому что вы не можете выбрать более одного файла за раз с помощью классического элемента управления HTML. Это боль, чтобы нажать n раз кнопку" Обзор", когда вы хотите выбрать несколько файлов в папке.

10 ответов


я реализовал что-то совсем недавно в Silverlight.

в основном использует HttpWebRequest для отправки куска данных в GenericHandler.

на первом посту отправляется 4 КБ данных. На 2-м куске я отправляю еще один кусок 4K.

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

используя этот метод, я могу загружать файлы любого размера и я могу продолжить.

каждый пост, который я отправляю по этой информации:

[параметры] [FILEDATA]

здесь параметры содержат следующие: [Кусок #] [Имя файла] [ID сессии]

после того, как каждый кусок получен, я отправляю ответ обратно на мой Silverlight, говоря, как быстро это потребовалось, чтобы теперь он мог отправить больший кусок.

трудно передать мое объяснение без кода, но это в основном, как я это сделал.

в какой-то момент я собрал быстрая запись о том, как я это сделал.


Я никогда не использовал его с файлами размером 2GB, но загрузчик файлов YUI работал довольно хорошо на предыдущем проекте. Вы также можете быть заинтересованы в этой плагин jQuery.

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


OK это мой взгляд на это

Я провел некоторое тестирование с swfupload, и у меня есть мой предыдущий опыт работы с Java, и мой вывод заключается в том, что независимо от используемой технологии нет идеального решения для загрузки в браузере : вы всегда будете в конечном итоге с ошибками при загрузке огромных файлов, происходит через прокси с SSL и т. д...

но :

  • флэш-загрузчик (a la swfupload) действительно легкий, не требует авторизации от пользователя и имеет собственный интерфейс, который действительно классный, мне кажется
  • загрузчик java нуждается в авторизации, но вы можете делать все, что хотите, с файлами, выбранными Пользователем (при необходимости сжатие aka), и перетаскивание работает хорошо. Будьте готовы к некоторым эпическим ошибкам отладки, хотя.
  • Я не получил изменения, чтобы играть с Silverlight, пока я хотел бы, может быть, это реальный ответ, хотя технология все еще довольно молодой такой ... Я отредактирую этот пост, если у меня будет возможность немного поиграть с Silverlight

Спасибо за все ответы !!


есть несколько бесплатных компонентов flash, которые существуют с хорошей возможностью загрузки нескольких файлов. Они используют класс FileReference ActionScripts с приемником PHP (или любым другим) на стороне сервера. Некоторые недавно сломались с запуском FP10, но я точно знаю, что swfupload будет работать :)

надеюсь, что это помогает!


Как насчет этих двух Jupload http://jupload.sourceforge.net/ и jumploader http://jumploader.com/

оба являются Java-апплетами, но они также очень просты в использовании и реализации.



есть элементы управления http / HTTPS upload, которые позволяют загружать несколько файлов. здесь это один из Телерик, который я нашел, чтобы быть твердым и надежным. Последняя версия, похоже, большинство, если не все ваши требования к функциям.


вы также можете загружать несколько файлов с HTTP-формами, как уже указал Дэйв, но если вы настроены на использование чего-то помимо HTTP и Javascript, я бы сильно рассмотрел Flash. Есть даже некоторые ранее существовавшие решения для него, такие как MultiPowUpload и он предлагает многие функции, которые вы ищете. Также легче получить информацию о ходе работы с помощью Flash-клиента, чем с AJAX-вызовами из Javascript, так как у вас есть немного больше гибкость.


вы можете проверить пакет Apache Commons FileUpload. Он позволяет загружать несколько файлов, следить за ходом загрузки и многое другое. Вы можете найти более подробную информацию here:

http://commons.apache.org/fileupload/
http://commons.apache.org/fileupload/using.html

Удачи!--10-->


самый простой способ загрузки файлов на java-GOJFileUpload.фляги библиотека

вот учебник библиотеки gojfileupload:

GOJFileUpload

Они дают два метода

  • UploadFile (String filepath,ArrayList imagenames,HttpRequest request)
  • UploadFile (String filepath, ArrayList dataname, ArrayList imagenames, HttpRequest запрос)

они вернут вам HashMap все имя файла который вы загрузили после загрузки в заданную папку назначения.