Лучший способ загрузить несколько файлов из браузера - PullRequest
36 голосов
/ 24 февраля 2009

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

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

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

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

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

Вопрос

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

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

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


Редактировать:

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

Ответы [ 10 ]

5 голосов
/ 25 февраля 2009

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

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

5 голосов
/ 25 февраля 2009

Я недавно что-то реализовал в Silverlight.

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

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

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

Используя этот метод, я могу загружать файлы ЛЮБОГО размера и я могу возобновить.

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

[ПАРАМЕТРЫ] [FILEDATA]

Здесь параметры содержат следующее: [Чанк №] [Имя файла] [ID сессии]

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

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

В какой-то момент я соберу краткое описание того, как я это сделал.

4 голосов
/ 27 февраля 2009

ОК, это мой взгляд на это

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

НО:

  • Flash Uploader (a la swfupload) действительно легкий, не требует авторизации от пользователя и имеет собственный интерфейс, который ДЕЙСТВИТЕЛЬНО классный, мне кажется
  • загрузчику Java требуется авторизация, но вы можете делать все, что захотите, с файлами, выбранными пользователем (иначе говоря, сжатием), и перетаскивание работает хорошо. Будьте готовы к отладке некоторых эпических ошибок.
  • У меня не было изменений, чтобы играть с Silverlight, пока я хотел бы, возможно, это реальный ответ, хотя технология еще очень молода, так что ... я буду редактировать этот пост, если у меня будет возможность немного поиграть с Silverlight

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

3 голосов
/ 24 февраля 2009

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

Надеюсь, это поможет!

2 голосов
/ 30 декабря 2010

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

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

1 голос
/ 08 ноября 2009

как насчет Google Gears ?

0 голосов
/ 04 сентября 2014

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

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

GOJFileUpload

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

  • UploadFile (строковый путь к файлу, имена изображений ArrayList, запрос HttpRequest)
  • UploadFile (строковый путь к файлу, имя данных ArrayList, ArrayList imagenames, запрос HttpRequest)

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

0 голосов
/ 24 февраля 2009

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

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

Удачи

0 голосов
/ 24 февраля 2009

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

0 голосов
/ 24 февраля 2009

Существуют элементы управления загрузкой HTTP / HTTPS, которые позволяют загружать несколько файлов. Здесь - это один из Telerik, который я считаю надежным и надежным. В последней версии, похоже, есть большинство, если не все ваши требования к функциям.

...