2008-12-08 5 views
4

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

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

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

ответ

8

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

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

    } 
+0

Спасибо, спасли мое драгоценное время – Selva 2015-09-16 08:33:14

-2

Пробовали ли вы request.getParam() еще?

+1

Да, я сделал, но это было null. Это связано с тем, что (мало) я знаю о multipartform-data и apache. – pkaeding 2008-12-08 20:45:23

3

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

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(); 
    }