2009-02-24 2 views
36

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

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


Edit:

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

Что можно сказать о возобновляемых загрузках? Для меня это действительно важно.Никто не любит перезагружать загрузку, которая не удалась через пару часов. –

+0

Правда, в этом случае я не думаю, что вы все еще можете использовать Flash, только Java (и Silverlight?) –

+0

Здравствуйте, еще один флеш-загрузчик можно найти по адресу http://digitarald.de/project/fancyupload/ – 2011-08-08 16:08:47

ответ

4

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

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

НО:

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

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

+1

Примечание для людей, которые находят этот ответ через несколько лет. Мы использовали SWFUpload в течение многих лет и, в целом, он работает очень хорошо. Следует отметить, что, поскольку Flash Player 9 не отправляет заголовки авторизации, он не будет работать, если вы используете встроенную проверку подлинности Windows или прокси-сервер, для которого требуется аутентификация. По этой причине мы перешли к решению на основе HTML5. –

0

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

+0

в отличие от других AJAX, этот привязан к .NET, что делает его бесполезным – Javier

+0

Кроме того, вы не можете выбрать один файл за раз. Возможно, вы хотели поговорить о контроле загрузки telerik silverlight. –

3

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

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

0

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

0

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

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

Успехов

+1

Apache Commons Fileupload - это библиотека на стороне сервера Java, используемая для анализа файла HTTP. У меня уже есть эта работа. Я действительно сосредоточен на клиентской части. –

5

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

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

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

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

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

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

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

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

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

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

В какой-то момент я расскажу о том, как я это сделал.

+0

Звучит здорово, я тоже хочу попробовать. Мне нравится, что мы можем, наконец, манипулировать файлами на стороне клиента, используя управляемый код! Долго Live Silverlight! – TJB

+0

Вы столкнулись с проблемами в игровом устройстве siverlight относительно менеджеров cookie браузера, прокси, поддержки платформы? –

+0

Silverlight работает на стороне клиента, а мой обработчик загрузки - сервер. Поскольку они оба отсоединены от сеанса, я должен передать идентификатор сессии в silverlight при запуске. При загрузке сеанс затем передается от silverlight к обработчику, тем самым сохраняя все в пределах сеанса. – Gautam

5

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

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

+0

Box.net использует flash-компонент в качестве первого варианта для своих загрузок. Затем этот компонент предоставляет ссылку на апплет java для пользователей, которые хотят использовать «drag'n'drop». –

1

что относительно google gears?

+0

Хорошая идея, но что немного пугает, так это то, что она не поддерживает Mac OS X Snow Leopard: Snow Leopard уже 2 месяца! Я попробую это на Firefox как можно скорее из любопытства;) Спасибо! –

2

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

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

+0

Да, я уже слышал о JUpload, у меня никогда не было шансов/времени, чтобы на самом деле стресс протестировал его немного. Я знаю, что проблема с загрузкой через https - проблема вообще (проблема заключается в самой реализации JDK. Если JUpload использует реализацию по умолчанию, она, вероятно, страдает от проблемы). –

+0

О Jumploader: пользовательский интерфейс кажется действительно приятным, похоже, поддерживает HTTP. Стоит посмотреть на мой взгляд :) –

0

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

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

GOJFileUpload

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

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

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

Смежные вопросы