Использование поля формы файла с сервлетом Java - PullRequest
0 голосов
/ 19 ноября 2009

Я пытаюсь получить имя файла или сам файл для использования в сервлете Java (из веб-формы).

У меня есть поле формы файла:

<form enctype="multipart/form-data" method="post" action="SaveDictionary.do">
    <label>
        <input type="file" name="dictionary_file" id="dictionary_file" />
        <br />
    </label>
    <label>
        <br />     
        <input type="submit" name="saveDic" id="saveDic" value="Save Dictionary" />
    </label>
 </form>

Я хочу затем обработать его в моем сервлете, что мне делать, чтобы обработать это - для обычного текстового поля я бы использовал что-то вроде

String myValue = (String) request.getParameter ("имя_параметра");

Предполагая, что у меня есть этот класс, что я помещаю в метод doPost (), чтобы получить либо путь к файлу, либо фактическое содержимое файла.

@SuppressWarnings("serial")
public class SaveDictionary extends HttpServlet {

    public void doPost(HttpServletRequest request,
  HttpServletResponse response) throws IOException, ServletException {

     // I can't work out what goes here, the same
     // String myValue = (String) request.getParameter("parameter_name"); doesn't work

        response.sendRedirect("dictionary.jsp");
    }

}

1 Ответ

1 голос
/ 19 ноября 2009

Multipart / form-data закодированные запросы не поддерживаются API сервлета по умолчанию. По сути, вам нужно самостоятельно проанализировать тело запроса на основе HttpServletRequest#getInputStream(). Но это драгоценная и утомительная работа. Вы не хотите делать это, если вы уже задаете этот вопрос здесь, в SO. К счастью, для этого уже существует надежный, тщательно разработанный и поддерживаемый API-интерфейс Apache Commons FileUpload API . Это на самом деле легко в использовании. Вы можете найти примеры в их Руководстве пользователя и советы и рекомендации в их FAQ .

Вы также можете обернуть его в Фильтр, который выполняет всю работу по синтаксическому анализу и помещает все параметры обратно в запрос, так что все это прозрачно в коде сервлета, и вы можете продолжать использовать HttpServletRequest#getParameter() и поддерживать обычным способом. Загруженные файлы могут быть получены в качестве атрибутов запроса. Вот основной пример .

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...