Tenho um form com campos texto e 1 do tipo file. Quando meu form tem o código: enctype=“multipart/form-data”, o arquivo passa tranquilo, mas é como se eu deixasse todos os campos vazios. Quando eu retiro este código os campos vão normalmente, porém o arquivo nao vai.
Procura na página da Jakarta. Dentro do projeto Commons
continua usando o enctype
Um exemplo
/* * FileUploadServlet.java * * Created on 16 de Julho de 2006, 19:26 */importjava.io.*;importjava.net.*;importjava.util.Iterator;importjava.util.List;importjavax.servlet.*;importjavax.servlet.http.*;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.FileItemFactory;importorg.apache.commons.fileupload.FileUpload;importorg.apache.commons.fileupload.FileUploadException;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;/** * * @author Rafael * @version */publicclassFileUploadServletextendsHttpServlet{/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */privateServletContextcontext;publicvoidinit(ServletConfigconfig)throwsServletException{context=config.getServletContext();}protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();/* TODO output your page here out.println("<html>"); out.println("<head>"); out.println("<title>Servlet FileUploadServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet FileUploadServlet at " + request.getContextPath () + "</h1>"); out.println("</body>"); out.println("</html>"); */out.close();}// <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 */protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//processRequest(request, response);request.getRequestDispatcher("./upload.jsp").forward(request,response);}/** Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//processRequest(request, response);booleanisMultipart=FileUpload.isMultipartContent(request);if(isMultipart){DiskFileItemFactoryfactory=newDiskFileItemFactory();factory.setSizeThreshold(-1);//factory.setRepository(new File("//Arquivos/"));ServletFileUploadupload=newServletFileUpload(factory);upload.setSizeMax(-1);try{Listitems=upload.parseRequest(request);Iteratoriterator=items.iterator();while(iterator.hasNext()){FileItemarquivo=(FileItem)iterator.next();if(arquivo.isFormField()){manipulaFormulario(arquivo,request);}else{manipulaArquivo(arquivo,context);}}}catch(FileUploadExceptionex){ex.printStackTrace();System.err.println("Erro ao enviar o arquivo");}}}publicvoidmanipulaFormulario(FileItemfile,HttpServletRequestrequest){StringnomeCampo=file.getName();StringvalorCampo=file.getString();}publicvoidmanipulaArquivo(FileItemfile,ServletContextcontext){Filecaminho=newFile(context.getRealPath("//Arquivos"));Stringnome=file.getName();String[]arq=nome.split("////");nome=arq[arq.length-1];Filearquiv=newFile(caminho,nome);try{file.write(arquiv);}catch(Exceptionex){ex.printStackTrace();}}/** Returns a short description of the servlet. */publicStringgetServletInfo(){return"Short description";}// </editor-fold>}
O problema é que você perde o request.getParameter(“campo”).