Отправка нескольких файлов в сервлет с одним подключением - PullRequest
5 голосов
/ 21 декабря 2010

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

Реализация имеет несколько требований:

  • Должен быть только один HTTP-запросиспользуется для сервера (поэтому только один поток)
  • Сервлет должен использовать разумный фиксированный объем памяти, независимо от размера файлов.

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

Вот в чем дело ... конечно, есть библиотека для этого.Я просмотрел Apache Commons и ничего не нашел.Загрузка файла Commons интересна, но поскольку загрузка происходит из приложения Java, а не из браузера, она решает только принимающую сторону, а не отправку.

Любые идеи для библиотеки, которая позволяет легко передавать несколько файлов через один поток.с фиксированными ожиданиями памяти даже для очень больших файлов?

Спасибо.

1 Ответ

7 голосов
/ 21 декабря 2010

Просто используйте кодировку HTTP multipart/form-data в теле запроса POST. Это описано в RFC-2388 и стандартном способе загрузки (нескольких) файлов по HTTP.

Вы можете сделать это всего за java.net.URLConnection, как описано в этом мини-учебнике , хотя это сгенерирует много шаблонного кода. Более удобный подход будет использовать Apache Commons HttpClient .

На стороне сервлета вы можете просто использовать Apache Commons Fileupload для обработки загруженных файлов обычным способом HTTP (или, когда вы уже используете Servlet 3.0, HttpServletRequest#getParts() см. также этот ответ для примеров).

...