2014-01-14 160 views
0

夥計們,我一直試圖上傳一個帶有來自表單字段的數據的文件,但我沒有運氣,我正在使用的servlet就在這裏。正如你可以看到的那樣,它已經被初始化了,如果有,那麼如果工作正常,但其餘的條件如果被忽略,並且沒有數據被檢索或顯示(使用out.print),所以我粘貼這裏的servlet代碼希望有人會看到我看不到的東西,請大家幫我解決這個問題。如何從Java Servlet中的Multipart表單獲取輸入?

import DAO.CuentaCobroDAO; 
import DTO.CuentaCobroDTO; 
import DTO.contratoDTO; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.sql.SQLException; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileItemFactory; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

/** 
* 
* @author Leonardo 
*/ 
public class CuentaCobroCtrol extends HttpServlet { 

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
* methods. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException, FileUploadException, ParseException, SQLException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    CuentaCobroDAO ccdao= new CuentaCobroDAO(); 
    CuentaCobroDTO cdto= new CuentaCobroDTO(); 
    contratoDTO con= new contratoDTO(); 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    FileItemFactory fif= new DiskFileItemFactory(); 
    ServletFileUpload sfu= new ServletFileUpload(fif); 
    String fechai="", fechaf=""; 
    String contrato, dias=null; 
    String valor, arl=null, eps=null, pension=null; 
    List items=sfu.parseRequest(request); 
    java.sql.Date fi, ff, factual; 
    Date fechaActual; 

    try{ 
    for (int i = 0; i < items.size(); i++) { 
     FileItem item = (FileItem) items.get(i); 

     if(item.isFormField()){ 

      if(item.getFieldName().equals("fechai")){ 
      fechai=obtenerDatoDeFormulario(item.getInputStream()); 
      out.print(fechai); 
      } 

      if(item.getFieldName().equals("fechaf")){ 
       fechaf=obtenerDatoDeFormulario(item.getInputStream()); 
       out.print("FECHAF"+fechaf); 
      } 


      if(item.getFieldName().equals("numcont")){ 
       contrato=obtenerDatoDeFormulario(item.getInputStream()); 
       out.print("CONTRATO"+contrato); 
      } 
      if(item.getFieldName().equals("dias")){ 
       dias=obtenerDatoDeFormulario(item.getInputStream()); 
       out.println(dias); 
      } 
      if(item.getFieldName().equals("valor")){ 
       valor=obtenerDatoDeFormulario(item.getInputStream()); 
       out.print(valor); 
      } 
      if(item.getFieldName().equals("arl")){ 
       arl=obtenerDatoDeFormulario(item.getInputStream()); 
       out.println("Por ARL:"+arl); 
      } 
      if(item.getFieldName().equals("eps")){ 
       eps=obtenerDatoDeFormulario(item.getInputStream()); 
       out.println("Por EPS:"+eps); 
      } 
      if(item.getFieldName().equals("pension")){ 
       pension=obtenerDatoDeFormulario(item.getInputStream()); 
       out.println("Por PENSION:"+pension); 
      } 

      out.print("El valor 2 de fecha I es:"+fechai); 

     } 
     /*   A continuación validamos que los campos que vienen del formulario no estén vacios, esto en caso de que javascript falle, 
     así garantizamos que tenemos todos los datos; hago esto antes de escribir el archivo en el servidor para evitar que se suba 
     información que está incompleta y no debe ser subida sino hasta que se compruebe que se tienen todos los datos.*/ 
     out.print("El valor 3 de fechai es:"+fechai+"el de final es:"+fechaf); 
      fechaActual= new Date(); 
      Date inicial=formatter.parse(fechai); 
      fi= new java.sql.Date(inicial.getTime()); 
      Date ffinal=formatter.parse(fechaf); 
      ff= new java.sql.Date(ffinal.getTime()); 
      factual=new java.sql.Date(fechaActual.getTime()); 
      out.print("El valor 4:"+fechai+"Y el de final es:"+fechaf); 
      if(fi.compareTo(factual)>0 || ff.compareTo(factual)>0){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg="+"Error, no puedes ingresar una cuenta del mes futuro o actual"); 
       break; 
      }else if(dias!=null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar los días trabajados"); 
       break; 
      }else if(30<Integer.parseInt(dias)){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= En el mes pueden ser máximo 30 días"); 
       break; 
      }else if(arl==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Tienes que ingresar el valor de la ARL"); 
       break; 
      }else if(eps==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Es necesario ingresar el valor de la EPS"); 
       break; 
      }else if(pension==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar el valor de pensión"); 
       break; 
      }else{ 
       String ruta="/archivos/pdf/"+request.getSession(false).getAttribute("iduser")+"/"; 
       String nombreArchivo=request.getSession(false).getAttribute("iduser")+"-"+factual; 
       if(!item.isFormField()){ 


        File archivoAServidor= new File(getServletContext().getRealPath(ruta+nombreArchivo)); 
        try { 
         item.write(archivoAServidor); 
        } catch (Exception ex) { 
         Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } 
      cdto.setFinicial(fi); 
      cdto.setFfinal(ff); 
      cdto.setDias(Integer.parseInt(request.getParameter("dias"))); 
      cdto.setHoras(Integer.parseInt(request.getParameter("horas"))); 
      cdto.setPagoArl(Integer.parseInt(request.getParameter("arl"))); 
      cdto.setPagoEps(Integer.parseInt(request.getParameter("eps"))); 
      cdto.setPagoPension(Integer.parseInt(request.getParameter("pension"))); 
      cdto.setIdContratista((Integer)request.getSession(false).getAttribute("iduser")); 
      cdto.setValorAPagar(Integer.parseInt(request.getParameter("valor"))); 
      con.setIdCONTRATO((Integer)request.getSession(false).getAttribute("idContrato")); 
      cdto.setRutaDocumento(ruta+nombreArchivo); 
      String salida=cdto.insertCuenta(cdto, con); 
      response.sendRedirect("nomina/cuentacobro.jsp?msg="+salida); 
      } 
    } 
    }catch(IOException iex){ 
     throw iex; 
    }catch(ParseException pex){ 
     throw pex; 
    } 






    try { 
     /* TODO output your page here. You may use following sample code. */ 
     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet CuentaCobroCtrol</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet CuentaCobroCtrol at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally { 
     out.close(); 
    } 
} 

private static String obtenerDatoDeFormulario(InputStream is){ 
    BufferedReader br=null; 
    StringBuilder sb= new StringBuilder(); 

    String linea; 


    try { 
     br= new BufferedReader(new InputStreamReader(is)); 
     while((linea=br.readLine())!= null){ 
      sb.append(linea); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally{ 
     if(br!=null){ 
      try { 
       br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 

    return sb.toString(); 

} 


// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     processRequest(request, response); 
    } catch (FileUploadException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ParseException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SQLException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

/** 
* Handles the HTTP <code>POST</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     processRequest(request, response); 
    } catch (FileUploadException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ParseException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SQLException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

} 

PD:在的out.print是用來顯示來自FIEL收集到的信息,但如果先處理再經過其他人都不理。

回答

0

好球員afther思考了很長很長的時間,我有一個天才要比火花終於意識到發生了什麼與此小服務程序,從而explenation是在這裏:

杉杉我必須說,在開始時我不能」當表單是一個多部分時,我們不知道數據是如何發送給servlet的,所以這裏是一個巨大的錯誤,我們不得不承認每一個表單字段都將被轉換爲一個項目,所以對於我使用的表單我有9個如果你分析我的第一個servlet,你會發現我使用if(9次),然後是嵌套的,如果是解析日期,這裏整個事情都是錯誤的方式,因爲cicle遍歷每個找到的項目,然後它會評估所有在主體o上找到的if因爲只有第一個cicle,我有一個不可解析的日期異常,這裏沒有任何東西可以工作,所以請記住,即使使用Iterator進行cicles時,或者每次都會運行次數等於項目評估次數的次數Cicle內部是什麼,所以要謹慎評估你評估的條件以及你如何去做。所以在這裏,我將把正確的servlet放到我想要的那個地方,那就是:獲取表單字段的內容,然後讓文件在服務器上寫下來,寫下來,最後將表單字段的信息存儲在數據庫。 在這裏,你會發現這個servlet(如果藉口一些代碼是混亂的,它可能是因爲它是寫在西班牙語)

package controlador; 

import DAO.CuentaCobroDAO; 
import DTO.CuentaCobroDTO; 
import DTO.contratoDTO; 
import java.sql.SQLException; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.io.File; 
import java.io.PrintWriter; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileItemFactory; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.util.Calendar; 


/** 
* 
* @author Leonardo 
*/ 
public class CuentaCobroCtrol extends HttpServlet { 

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
* methods. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException, FileUploadException, ParseException, SQLException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter();     
    String fechaIni=""; 
    String fechaFin=""; 
    String contrato=""; 
    String valorArl=""; 
    String valorEps=""; 
    String valorPension=""; 
    String valorAPagar=""; 
    String numeroDias=""; 
    String ruta=""; 
    String nombreArchivo=""; 
    String timeStamp=""; 
    boolean suceed=false; 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    CuentaCobroDAO ccdao= new CuentaCobroDAO(); 
    CuentaCobroDTO cdto= new CuentaCobroDTO(); 
    contratoDTO con= new contratoDTO(); 


    FileItemFactory ff = new DiskFileItemFactory(); 



    ServletFileUpload sfu = new ServletFileUpload(ff); 



    List items = sfu.parseRequest(request); 
    java.sql.Date fi=null, fif=null, factual=null; 
    Date fechaActual; 

    try{ 


     for(int i=0;i<items.size();i++){ 



     FileItem item = (FileItem) items.get(i); 

     if (item.isFormField()){ 

         /*   A continuación validamos que los campos que vienen del formulario no estén vacios, esto en caso de que javascript falle, 
     así garantizamos que tenemos todos los datos; hago esto antes de escribir el archivo en el servidor para evitar que se suba 
     información que está incompleta y no debe ser subida sino hasta que se compruebe que se tienen todos los datos.*/ 
      if(item.getFieldName().equals("numcont")){ 
       contrato=getStringFromInputStream(item.getInputStream()); 
       out.print("<br/> el valor de numero es: "+contrato); 
      } 
      if(item.getFieldName().equals("dias")){ 
       numeroDias=getStringFromInputStream(item.getInputStream()); 
       out.print(" <br/> el valor de dias es: "+numeroDias); 
       if(numeroDias==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar los días trabajados"); 
       break;}else if(30<Integer.parseInt(numeroDias)){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= En el mes pueden ser máximo 30 días"); 
       break; 
      } 
      } 
      if(item.getFieldName().equals("valor")){ 
       valorAPagar=getStringFromInputStream(item.getInputStream()); 
       out.print(" <br/> el valor es: "+valorAPagar); 
       if(Integer.parseInt(valorAPagar)<=0 || valorAPagar==null){ 
        response.sendRedirect("nomina/cuentacobro.jsp?msg= El valor no puede ser nagativo o nulo. Por favor ingresa el valor a pagar"); 
       } 
      } 
      if(item.getFieldName().equals("arl")){ 
       valorArl=getStringFromInputStream(item.getInputStream()); 
       out.print(" <br/> el valor de arl es: "+valorArl); 
       if(valorArl==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Tienes que ingresar el valor de la ARL"); 
       break; 
      } 
      } 
      if(item.getFieldName().equals("eps")){ 
       valorEps=getStringFromInputStream(item.getInputStream()); 
       out.print(" <br/> el valor de eps es: "+valorEps); 
       if(valorEps==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Es necesario ingresar el valor de la EPS"); 
       break; 
      } 
      } 
      if(item.getFieldName().equals("pension")){ 
       valorPension=getStringFromInputStream(item.getInputStream()); 
       out.print(" <br/> el valor de pension es: "+valorPension); 
       if(valorPension==null){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Debes ingresar el valor de pensión"); 
       break; 
      } 
      } 
      if(item.getFieldName().equals("fechai")) 
     { 
      fechaIni=getStringFromInputStream(item.getInputStream()); 
      out.print("el valor de fechaInicial es: "+fechaIni); 
      if(fechaIni==null || fechaIni.length()<4){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg= Error, no ingresaste el valor de fecha periodo inicial"); 
      } 
     } 
      if(item.getFieldName().equals("fechaf")){ 
       fechaFin=getStringFromInputStream(item.getInputStream()); 
       fechaActual= new Date(); 
      Date inicial=formatter.parse(fechaIni); 
      fi= new java.sql.Date(inicial.getTime()); 
      Date ffinal=formatter.parse(fechaFin); 
      fif= new java.sql.Date(ffinal.getTime()); 
      factual=new java.sql.Date(fechaActual.getTime()); 
      if(fi.compareTo(factual)>0 || fif.compareTo(factual)>0){ 
       response.sendRedirect("nomina/cuentacobro.jsp?msg="+"Error, no puedes ingresar una cuenta del mes futuro o actual"); 
       break; 
      } 

      } 
    } 

     if(!item.isFormField()){ 
       timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); 
       ruta="/archivos/pdf/"+request.getSession(false).getAttribute("iduser")+"/"; 
       nombreArchivo=request.getSession(false).getAttribute("iduser")+"-"+timeStamp+".pdf"; 
        File dir=new File(ruta+nombreArchivo); 
        dir.mkdirs(); 
        File archivoAServidor= new File(getServletContext().getRealPath(ruta+nombreArchivo)); 

        try { 
         item.write(archivoAServidor); 
         suceed=true; 
        } catch (Exception ex) { 
         Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
        } 
       } 
    } 
    if(suceed==true){ 
     cdto.setFinicial(fi); 
      cdto.setFfinal(fif); 
      cdto.setDias(Integer.parseInt(numeroDias)); 
      cdto.setHoras(Integer.parseInt("0")); 
      cdto.setPagoArl(Integer.parseInt(valorArl)); 
      cdto.setPagoEps(Integer.parseInt(valorEps)); 
      cdto.setPagoPension(Integer.parseInt(valorPension)); 
      cdto.setIdContratista((Integer)request.getSession(false).getAttribute("iduser")); 
      cdto.setValorAPagar(Integer.parseInt(valorAPagar)); 
      con.setIdCONTRATO((Integer)request.getSession(false).getAttribute("idContrato")); 
      cdto.setRutaDocumento(ruta+nombreArchivo); 
      String salida=cdto.insertCuenta(cdto, con); 
      response.sendRedirect("nomina/cuentacobro.jsp?msg="+salida); 
    } 



    }catch(IOException iex){ 
     throw iex; 
    }catch(ParseException pex){ 
     throw pex; 
    } 






    try { 
     /* TODO output your page here. You may use following sample code. */ 
     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet CuentaCobroCtrol</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet CuentaCobroCtrol at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally { 
     out.close(); 
    } 
} 

private static String getStringFromInputStream(InputStream is) { 

    BufferedReader br = null; 
    StringBuilder sb = new StringBuilder(); 

    String line; 
    try { 

     br = new BufferedReader(new InputStreamReader(is)); 
     while ((line = br.readLine()) != null) { 
      sb.append(line); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      try { 
       br.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    return sb.toString(); 

} 


// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     processRequest(request, response); 
    } catch (FileUploadException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ParseException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SQLException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

/** 
* Handles the HTTP <code>POST</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     processRequest(request, response); 
    } catch (FileUploadException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (ParseException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SQLException ex) { 
     Logger.getLogger(CuentaCobroCtrol.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

} 
0

我不知道這是否會幫助任何,因爲我在這個例子中使用註釋,但這裏是一個樣本servlet將文件上載並將其保存到文件系統:https://www.openshift.com/forums/openshift/how-to-upload-and-serve-files-using-java-servlets-on-openshift

+0

MMM以及這裏的問題是,我已經做了上傳文件的servlet和只用構建這個例子的例子,我的問題是讀取來自表單的輸入,因爲它們沒有被拾取,並且如果在第一個被評估之後似乎被忽略。 – Leo21

+0

你可以驗證什麼items.size是通過將它登錄到我們輸出到屏幕的地方嗎?也許只是循環瀏覽並獲取字段名稱並將其打印出來? – 2014-01-14 15:24:04

+0

我可以試試,但我認爲我不會得到任何東西,因爲正如我之前提到的評估「fechai」列表的第一個「if」之前,其餘的都不是,因爲它正在執行循環,甚至只是一個週期,我相信它應該執行它,因爲只要使用「for」狀態表示循環在leats中執行一次,直到達到條件,所有if應該被執行或者我錯了嗎? – Leo21

0

您將得到上傳的文件如果是不是表單域。所以,你的檢查應該是:

if(!item.isFormField()){ 
    String fileName = item.getName(); 
    InputStream is = item.getInputStream(); 
    // process the file 
} else { 
    // Get the field name 
    String fieldName = item.getName(); 
    // Get the field value 
    String value = item.getString(); 
} 

退房 http://commons.apache.org/proper/commons-fileupload/using.html瞭解更多詳情。

+0

謝謝,我明白,但我想實現的是從表單域中檢索數據,因爲初始表單是一個包含要上傳文件和一些信息的多部分表單,我想要做的就是捕獲表單字段將它們放入變量中,所以我可以將該信息寫入數據庫,並上傳一個與該信息相對應的文件 – Leo21

+0

那麼爲什麼當它是一個表單字段時,有如「item.getInputStream()」的代碼?此外,所有這些文件項目? – Salil

+0

因爲我需要從表單輸入來的等於字段的名稱,所以我使用item.getimputStream將數據發送到該字段的轉換方法(ObtenerDatoDeFormulario),以便它可以轉換爲串!但正如我之前提到的,表單的第一個字段是唯一被認可的字符,其他字符只是被忽略,我不知道爲什麼! – Leo21

相關問題