Лучший способ загрузить несколько файлов из браузера
Я работаю над веб-приложением. Есть одно место, где пользователь может загружать файлы по протоколу 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:
Они дают два метода
- UploadFile (String filepath,ArrayList imagenames,HttpRequest request)
- UploadFile (String filepath, ArrayList dataname, ArrayList imagenames, HttpRequest запрос)
они вернут вам HashMap все имя файла который вы загрузили после загрузки в заданную папку назначения.