Как я могу прочитать другие параметры в многочастной форме с Apache Commons - PullRequest
4 голосов
/ 08 декабря 2008

У меня есть форма загрузки файла, которая отправляется обратно в сервлет (с использованием кодирования 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 ...
    }

Ответы [ 3 ]

9 голосов
/ 08 декабря 2008

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

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
            }
        }

    }
3 голосов
/ 03 ноября 2011

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

    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();
    }
0 голосов
/ 08 декабря 2008

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

...