значения входных текстовых полей в html-форме - PullRequest
7 голосов
/ 20 апреля 2011

Я использую Apache Commons FileUpload в серверном Java-приложении, которое имеет HTML-форму с полями:

  1. пункт назначения, который будет заполненный адресом электронной почты почтовый ящик назначения

  2. текст сообщения с сообщением отправителя

  3. a <input type=file ... поле для загрузки фото. Я могу получить загруженный файл (в виде потока), но как мне получить доступ к 1) и 2) значениям формы (заполняется пользователем приложения)? Большое спасибо, Аурел

Ответы [ 4 ]

6 голосов
/ 06 июня 2014

Я предполагаю, что вы используете FileItemIterator для итерации элементов в запросе.Метод iterators next () возвращает FileItemStream (не FileItem).Откройте поток для этого объекта и превратите его в строку, подобную этой:

import org.apache.commons.fileupload.util.Streams;
...
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
String name = item.getFieldName();
String value = Streams.asString(stream);

Метод getString, предложенный другими ответами, является методом интерфейса FileItem.

5 голосов
/ 20 апреля 2011

Вы можете получить их, используя тот же API. Просто цепляйтесь, когда FileItem#isFormField() возвращает true. Если он возвращает false, то это загруженный файл, который вы, вероятно, уже используете.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                // ... (do your job here)
            } else {
                // Process form file field (input type="file").
                String fieldname = item.getFieldName();
                String filename = FilenameUtils.getName(item.getName());
                InputStream filecontent = item.getInputStream();
                // ... (do your job here)
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }

    // ...
}
1 голос
/ 11 июля 2017

Итак, я использовал экземпляр fileItem как:

Hashtable incoming = new Hashtable();
fileName = sfu.parseRequest(request);

//iterating over each uploaded file and storing the values of different parameters in the HashTable (incoming)

for(FileItem f:fileName)
                    {
                    incoming.put(f.getFieldName(), f.getString()); 
                    }
//utilizing that HashTable and getting the value of desired field in the below manner, as in my case i required the value of "permissions" from the jsp page

             for(FileItem f:fileName)
                    {
                        String role= (String)incoming.get("permission"); //as it is a multipart form request, so need to get using this
                    }   

Спасибо

1 голос
/ 25 ноября 2011

Вот что я использую для этой цели:

public static Hashtable getParamsFromMultipartForm(HttpServletRequest req) throws FileUploadException { Hashtable ret = new Hashtable(); List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(req); for (FileItem item : items) { if (item.isFormField()) { ret.put(item.getFieldName(), item.getString()); } } return ret; }

А потом, когда мне нужно значение любого из моих параметров, я просто пишу, скажем:

//at the beginning of a servlet Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req);</p> <p>String myParamFromForm = multipartParams.get("myParamFromForm");

...