Как передать дополнительную информацию с? - PullRequest
2 голосов
/ 26 декабря 2011

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

<form action='MyUploadServlet' enctype='multipart/form-data' method='POST'>
    <input type='file' name='filechooser'><br />
    <textarea name='comment' cols='15' rows='5'></textarea>
    <input type='Submit' value='Upload'><br />
</form>

Вот фрагмент кода сервера:

@WebServlet("/MyUploadServlet") 
public class MyUploadServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        {
            ServletContext sc = request.getServletContext();
            String comment = (String)request.getParameter("comment");
            ....etc}

Пропущенная часть кода сервера связана с получением содержимого.загруженного файла.

Строка request.getParameter ("comment") выше возвращает ноль.Я использую несколько сервлетов и несколько форм в моем приложении.Во всех других местах, если я использую request.getParameter («form-input-name»), я всегда получаю значение соответствующего поля ввода.Это единственное исключение, а именно, когда форма имеет поле ввода типа «файл».

Как передать комментарий вместе с отправкой файла для отправки?

1 Ответ

3 голосов
/ 27 декабря 2011

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

Вы указали HTML-форму для отправки данных вmultipart/form-data кодировка вместо стандартной application/x-www-form-urlencoded кодировки.Кодировка multipart/form-data обязательна для отправки содержимого файла вместе с отправкой формы.Однако метод getParameter() работает в сочетании только с application/x-www-form-urlencoded.

Запрос multipart/form-data обычно должен анализироваться с помощью синтаксического анализатора multipart/form-data, такого как хорошо известный Apache Commons FileUpload , который является стандартом де-факто в этой области.Однако, поскольку Servlet 3.0 (который вы, кажется, фактически используете, учитывая наличие также в Servlet 3.0, представил аннотацию @WebServlet), существует новый метод getParts(), которыйпозволяет извлекать необходимые отправленные данные, используя стандартные методы, без необходимости использования Apache Commons FileUpload.Тем не менее, он все еще немного более подробный, чем с Apache Commons FileUpload.Вы можете найти конкретный пример обоих подходов в этом ответе: Как загрузить файлы на сервер, используя JSP / Servlet?

...