Passar parametros via post usando multipart/form-data
7 respostas
dmribeiro
Surgiu um problema:
Quando faço o upload usando o enctype="multipart/form-data" não consigo recuperar nenhum parametro via post na minha servlet.
Se retirar o enctype="multipart/form-data" consigo recuperar os parametros via post na minha servlet mas não consigo fazer o upload.
Já dei uma pesquisada sobre o assunto, porem não consegui resolver meu problema. Alguem ja passou por isso?
Se não me engano o enctype=“multipart/form-data”, é específico para upload…
se você usar ele, não sei se vai conseguir mandar outras informações pelo mesmo form.
dmribeiro
build_successful , ele não chega nem a enviar os parametros quanto o metodo é post, somente se retirar o multipart/form-data.
Mas via Get funfa belza, to achando que isso é um bug.
leocantanhede
Tive este mesmo problema, terá que usar uma biblioteca para fazer upload e depois utilizá-la para recuperar os valores, recomendo a Apache Commons-FileUpload
novato25
você importou a biblioteca commons-file-upload.jar no seu projeto? se você está utilizando o tomcat, faça o teste colocando também esta biblioteca na pasta lib (no tomcat).
dmribeiro
Já realizei todos estes passos, estou utilizando a biblioteca jackarta, utilizo o apache, já coloquei o jar na pasta lib tbm.
A questão não é o upload, pois este funciona blz, e os paramentros dele eu consigo pegar como podem ver no codigo abaixo. A questão é que preciso passar
algumas informações do formulário principal para servlet e envialas para o uploadFile.jsp
<%@pageimport="com.mysql.jdbc.Driver.*"%><%@pageimport="java.sql.*"%><%@pageimport="conecta.*"%><%@pageimport="javax.servlet.*"%><%@pageimport="java.util.*"%><%@pageimport="java.io.*"%><%@pageimport="javax.servlet.http.*"%><%@pageimport="org.apache.commons.fileupload.*"%><%@pageimport="org.apache.commons.fileupload.disk.*"%><%@pageimport="org.apache.commons.fileupload.servlet.*"%><%@pageimport="org.apache.commons.io.output.*"%><%System.out.println("parametros: "+request.getParameter("id")+" "+request.getParameter("file"));Filefile;intmaxFileSize=5000*1024;intmaxMemSize=5000*1024;ServletContextcontext=pageContext.getServletContext();StringfilePath=context.getInitParameter("file-upload");// pega o parametro do xml(no caso o caminho onde será salvo os arquivos)// Verifique se o tipo de conteúdoStringcontentType=request.getContentType();// System.out.println("contentType " + contentType.indexOf("multipart/form-data"));// System.out.println("contentType " + contentType);if((contentType.indexOf("multipart/form-data")>=0)){System.out.println("entrou no loop");DiskFileItemFactoryfactory=newDiskFileItemFactory();// Tamanho máximo que será armazenado na memóriafactory.setSizeThreshold(maxMemSize);// Local para guardar dados que é maior do que maxMemSize.factory.setRepository(newFile("C:\temp"));// Criar um novo arquivo do manipulador de uploadServletFileUploadupload=newServletFileUpload(factory);// Tamanho máximo de arquivo a ser carregado.upload.setSizeMax(maxFileSize);try{// Analisar a solicitação para obter itens de arquivo.ListfileItems=upload.parseRequest(request);// Processar os itens de arquivos enviadosIteratori=fileItems.iterator();out.println("<html>");out.println("<head>");out.println("<title>JSP Arquivo upload</title>");out.println("</head>");out.println("<body>");while(i.hasNext()){FileItemfi=(FileItem)i.next();if(!fi.isFormField()){// Pega os parâmetros de arquivos enviadosStringfieldName=fi.getFieldName();StringfileName=fi.getName();booleanisInMemory=fi.isInMemory();longsizeInBytes=fi.getSize();// Escreve o arquivoif(fileName.lastIndexOf("\\")>=0){file=newFile(filePath+fileName.substring(fileName.lastIndexOf("\\")));}else{file=newFile(filePath+fileName.substring(fileName.lastIndexOf("\\")+1));}fi.write(file);out.println("Uploaded Filename: "+filePath);System.out.println("file: "+file);}}out.println("</body>");out.println("</html>");}catch(Exceptionex){System.out.println(ex);}}else{out.println("<html>");out.println("<head>");out.println("<title>Arquivo Servlet upload</title>");out.println("</head>");out.println("<body>");out.println("<p>Não foi feito upload do arquivo</p>");out.println("</body>");out.println("</html>");}%>
dmribeiro
Para não deixar o post sem resposta venho finaliza-lo, para alguem mais que tiver o mesmo problema segue a solução:
if(fi.isFormField()){// Apartir deste ponto recupera-se os parametros do formulário Stringidd=fi.getString();System.out.println("retorno incerto: "+idd);}
Basta apenas acrescentar esta parte no código (no caso deste exemplo o uploadFile.jsp), com ela conseguimos todos os parametros enviados.