4

I have a file upload form that is being posted back to a servlet (using multipart/form-data encoding). In the servlet, I am trying to use Apache Commons to handle the upload. However, I also have some other fields in the form that are just plain fields. How can I read those parameters from the request?

For example, in my servlet, I have code like this to read in the uplaoded file:

    // 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 ...
    }
pkaeding
  • 36,513
  • 30
  • 103
  • 141

3 Answers3

10

You could try something like this:

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

    }
stian
  • 2,874
  • 3
  • 24
  • 38
3

Took me a few days of figuring this out but here it is and it works, you can read multi-part data, files and params, here is the code:

    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();
    }
Bo Persson
  • 90,663
  • 31
  • 146
  • 203
-3

Did you try request.getParam() yet?

  • 1
    Yes, I did, but it was null. This jives with what (little) I know about multipartform-data and apache commons. – pkaeding Dec 08 '08 at 20:45