Лучший способ загрузить несколько файлов из браузера
Я работаю над веб-приложением. Существует одно место, где пользователь может загружать файлы с помощью протокола 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-раз кнопку "просмотреть", когда вы хотите выбрать несколько файлов в папке.
Ответы
Ответ 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-апплетами, но они также очень просты в использовании и реализуются.
Ответ 6
как насчет google gears?
Ответ 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 все имя файла, которое вы загрузили после загрузки в указанной папке назначения.