Подтвердить что ты не робот

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

Я работаю над веб-приложением. Существует одно место, где пользователь может загружать файлы с помощью протокола 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 гб
  • у вас есть карт-бланш по технологии

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


Изменить:

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

Ответ 1

ОК, это мой подход к

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

НО:

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Удачи.

Ответ 10

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

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

GOJFileUpload

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

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

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