2008-12-08 23 views
4

我有一個文件上傳表單,它正在發送回servlet(使用multipart/form-data encoding)。在servlet中,我試圖使用Apache Commons來處理上傳。但是,我還有一些其他字段只是普通字段。我如何從請求中讀取這些參數?我如何使用Apache Commons讀取多部分表單中的其他參數

例如,在我的servlet,我有這樣的代碼在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

是的,我做了,但它是空的。這與我所知道的有關multipartform-data和apache commons的一些(少)有關。 – pkaeding 2008-12-08 20:45:23

3

我花了幾天搞清楚了這一點,但這裏是和它的作品,你可以閱讀多部分數據,文件和參數,可以在這裏是代碼:

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(); 
    } 
相關問題