Problemas para pegar e cadastrar parametros vindos de upload

2 respostas
C

Oi pessoas.

Recentemente programei um sistema de upload em que se pegassem dados do usuário junto com o upload.
Todos sabemos que o submit de campos file é criptografado, então temos q fazer um teste com if e else pra pegar os parâmetros.

Só que fiz isso com sessões, e quando fiz um teste errado (foi teste) a sessão não morreu, pois o tratamento parou na metade e a sessão morria no fim do tratamento.

Então tentei setar com variáveis count1=0, count2=0, ect e depois setar count1=1, etc,,... (não deu certo)

Fiz o sistema mostrar se pegava os campos assim que mudei o modo de tratamento do upload e retornava null em todos .

Por favor, gostaria de uma orientação:

<%     
  Connection conn = Conexao.getConexao();
  PreparedStatement pstmt = null;
 
 String caminho="";
 String proprietario="";
 String endereco="";
 String cpf="";
 String telefone="";
 int count1=0, count2=0, count3=0, count4=0, count5=0;
     
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  // String contentType = request.getContentType();
 // if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
 if (!isMultipart) {
     out.println("Não foi possível enviar a requisição!");
 } else {
   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   upload.setSizeMax(1*1024*1024); //define o tamanho maximo do arquivo para upload 50Mb
   //upload.setFileSizeMax(160); não sei usar isso mas gostaria de redimensionar antes de enviar, 
//assim não ultrapassa o limite do tamanho e não bagunça o layout
   List items = null;
   
   try {
       items = upload.parseRequest(request);
   } catch (FileUploadException e) {
       e.printStackTrace();
   }
   
   Iterator itr = items.iterator();
   while (itr.hasNext()) 
	   {
       FileItem item = (FileItem) itr.next();
       if (item.isFormField())
	   {
	      String name = item.getFieldName();
		  String value = item.getString();
		  if(name.equals("caminho")) {
                      caminho=value;
                      count1=1;
                  }
                  if(name.equals("proprietario")) {
                      proprietario=value;
                      count2=1;
                   }
                  if(name.equals("endereco")) {
                      endereco=value;
                      count3=1;
                   }
                  if(name.equals("cpf")) {
                      cpf=value;
                      count4=1;
                  }
                  if(name.equals("telefone")) {
                      telefone=value;
                      count5=1;
                  }

          } else  {
         
   try {
       
   String itemName = item.getName();  
   String valor = item.getFieldName();

 //***************************************************************************************//
//    Recuperando sessões, ou melhot, parametros para cadastrar os valores dos parametros no banco de dados, junto com o arquivo  //
//**************************************************************************************//
   
      if (count1==1 || count2==1 || count3==1 || count4==1 || count5==1) {

      File savedFile = new File(application.getRealPath("/")+"/images/ads/publicidade/"+item);
      item.write(savedFile);

   try {
       pstmt = conn.prepareStatement("INSERT INTO ads (arquivo, url, proprietario, endereco, cpf, telefone) "+
              " VALUES (?, ?, ?, ?, ?, ?)");
       pstmt.setObject(1, item);
       pstmt.setObject(2, caminho);
       pstmt.setObject(3, proprietario);
       pstmt.setObject(4, endereco);
       pstmt.setObject(5, cpf);
       pstmt.setObject(6, telefone);
       pstmt.execute();

         session.setAttribute("uploadOK", "Arquivo enviado com sucesso!");
         response.sendRedirect("welcome.do");
        //out.println("enviado!");

   } catch (SQLException sqlex) { 
       //out.println("ERRO 2: Não foi possível redirecionar...<p>");
       //out.println(sqlex);

       session.setAttribute("uploadOK", "Não foi possível cadastrar o arquivo!");
       response.sendRedirect("welcome.do");
   }

  } else {
       session.setAttribute("uploadOK", "Problemas para enviar o arquivo!");
       response.sendRedirect("welcome.do");
  }
  } catch (Exception e) {
  // e.printStackTrace();
  // out.println(e);
   out.println("<h3>Erro ao tentar enviar arquivo!</h3>");
   }
   }
   }
   }
  
%>

Este é o source, por favor, não me xinguém . kk Assim q eu resolver isso, crio servlets para reusar o código. (prometo)

Tanks.

2 Respostas

C

Consegui, só que tem um problema.. =/

Eu envio mas tenho que dá um refresh na página para mostrar os valores na tela, o que é um problema.

Vejam o fraglante nas imagens:

String url="";   
     String proprietario="";
     int count1=0,count2=0;
 %>
 <%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
 if (!isMultipart) {
 } else {
   FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List items = null;
   try {
   items = upload.parseRequest(request);
   } catch (FileUploadException e) {
   e.printStackTrace();
   }
   Iterator itr = items.iterator();
   while (itr.hasNext())   {
   FileItem item = (FileItem) itr.next();
   if (item.isFormField())  {
         String name = item.getFieldName();
        String value = item.getString();
        if(name.equals("url"))  {
                      url=value;
                      count1=1;
                  }
                  
                  if(name.equals("proprietario"))  {
                      proprietario=value;
                      count2=2;
                  }
                  
  } else {
   
   try {
       
   String itemName = item.getName();  
   String valor = item.getFieldName(); 

   File savedFile = new File(application.getRealPath("/")+"uploads\\"+itemName);
   item.write(savedFile);
  %>
<center>
    
<table border="2" width="350">
    <tr>
        <td width="210"></td>
        <td> <img  border="2" src="uploads/<%=itemName%>" width="137"  height="140"></td>
    </tr>

         
    <%    

        if(count1==1)
             out.println("<tr><td align='left'><b>URL:</b></td><td>"+url+"</td></tr>");
      //  if(count2==2)    
       out.println("<tr><td align='left'><b>Proprietário:</b></td><td>"+proprietario+"</td></tr>");  
          
   } catch (Exception e) {
   e.printStackTrace();
   }
   }
   }
   }
 
 %>
 
</table>
</center>

[img]http://www.javafree.org/file/d.jbb?fileId=1345[/img]

[img]http://www.javafree.org/file/d.jbb?fileId=1342[/img]

[img]http://www.javafree.org/file/d.jbb?fileId=1343[/img]

O arquivo upload.do era um servlet, mas como página JSP ficaria mais fácil eu intender e modificar para saber o que causou o problema.

Preciso de uma orientação de vocês.

Obrigado.

D

Também enfrento o mesmo problema:

No meu caso é um servlet mesmo, e os parâmetros não são mostrados na tela, apenas a imagem é enviada e mostrada:

public class Upload extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=iso-8859-1");
        PrintWriter out = response.getWriter();
        
         String url="";    
         String proprietario="";
         String endereco="";
         int count1=0,count2=0,count3=0;
         
         boolean isMultipart = ServletFileUpload.isMultipartContent(request);
         
         if (!isMultipart) {
             out.println("Erro na requisição!");
         } else {
             
             FileItemFactory factory = new DiskFileItemFactory();
             ServletFileUpload upload = new ServletFileUpload(factory);
             List items = null;
             
             try {
                 items = upload.parseRequest(request);
             } catch (FileUploadException e) {
                 e.printStackTrace();
             }
             
             Iterator itr = items.iterator();
             while (itr.hasNext()) {
                 FileItem item = (FileItem) itr.next();
                 if (item.isFormField()) {
                     String name = item.getFieldName();
                     String value = item.getString();
                     if(name.equals("url")) {
                         url=value;
                         count1=1;
                     }
                     if(name.equals("proprietario")) { 
                         proprietario=value;
                         count2=2;
                     }
                     if(name.equals("endereco")) {
                         endereco=value;
                         count3=3;
                     }
                 
                 } else {
                     
                     try {
                         String itemName = item.getName();
                         File savedFile = new File(getServletContext().
                                 getRealPath("/")+"images\\ads\\publicidade\\"+(new File(itemName)).getName());
                         item.write(savedFile);
                         out.println("<center><table><tr><td width=\"210\"></td>"+
                                 "<td><img border=\"2\" src=\"../images/ads/publicidade/"+itemName+"\""+
                                 " width=\"137\"  height=\"140\"></td></tr></table>"+
                                 "<table border=\"2\" width=\"350\"><tr><td>"); 
                         if(count1==1)
                             out.println("<tr><td align='left'><b>Name:</td><td>"+url);
                         if(count2==2)
                             out.println("</td><tr><td align='left'><b>Addresss:</td><td>"+proprietario);
                         if(count3==3)
                             out.println("</td><tr><td align='left'><b>Contact No</td><td>"+endereco);
                         if(count4==4)

                        out.println("Arquivo enviado com sucesso!");

                     } catch (Exception e) {
                         e.printStackTrace();
                         out.println("Exception: "+e);
                     }
                 }
             }
         }

         out.println("</td></tr></table></center>");
    }

Caras, antes isso não era problema pra mim, não entendo o que houve...
Não pega os parametros e seta na tela de jeito nenhum...

Tirei um print da tela pra vocês verem o que acontece.

visualização:

[img]http://img36.imageshack.us/img36/48/upload.gif[/img]

Aguardo respostas.

Se não resolver isso meus projetos não continuam.
Tudo depende de resolver este problema.
É o único problema que tenho no projeto. =/

att

Criado 15 de maio de 2009
Ultima resposta 16 de mai. de 2009
Respostas 2
Participantes 2