Как я могу прочитать другие параметры в составной форме с помощью Apache Commons

StackOverflow https://stackoverflow.com/questions/350794

Вопрос

У меня есть форма загрузки файла, которая отправляется обратно в сервлет (используя кодировку multipart / form-data).В сервлете я пытаюсь использовать Apache Commons для обработки загрузки.Однако у меня также есть некоторые другие поля в форме, которые являются простыми полями.Как я могу прочитать эти параметры из запроса?

Например, в моем сервлете у меня есть подобный код для чтения в закодированном файле:

    // Create a factory for disk-based file items
    FileItemFactory factory = new DiskFileItemFactory();
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // Parse the request
    Iterator /* FileItem */ items = upload.parseRequest(request).iterator();
    while (items.hasNext()) {
        FileItem thisItem = (FileItem) items.next();
        ... do stuff ...
    }
Это было полезно?

Решение

Вы могли бы попробовать что-то вроде этого:

while (items.hasNext()) {
        FileItem thisItem = (FileItem) items.next();
        if (thisItem.isFormField()) {
            if (thisItem.getFieldName().equals("somefieldname") {
                String value = thisItem.getString();
                // Do something with the value
            }
        }

    }

Другие советы

Мне потребовалось несколько дней, чтобы разобраться в этом, но вот оно, и оно работает, вы можете читать состоящие из нескольких частей данные, файлы и параметры, вот код:

    try {

        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(req);
        while(iterator.hasNext()){


            FileItemStream item = iterator.next();
            InputStream stream = item.openStream();
            if(item.isFormField()){
                if(item.getFieldName().equals("vFormName")){

                    byte[] str = new byte[stream.available()];
                    stream.read(str);
                    full = new String(str,"UTF8");
                }
            }else{
                byte[] data = new byte[stream.available()];
                stream.read(data);
                base64 = Base64Utils.toBase64(data);
            }
        }

    } catch (FileUploadException e) {

        e.printStackTrace();
    }

Вы уже пробовали request.getParam()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top