Resgatar parametro de form multipart/form-data

2 respostas
skekeu

Opa pessoal,

Estou precisando fazer um upload e ao mesmo tempo pegar alguns parametros do form ...
Só q quando seto o enctype=multipart/form-data não consigo usar o getParameter do Servlet.

O código abaixo é somente para estudo

boolean isMultipart = FileUpload.isMultipartContent(request);
        
        if(isMultipart){
        
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        
        
        try{
        
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            
            while(iter.hasNext()){
            FileItem item = (FileItem)iter.next();
            
            String caminho = item.getName();
            String tipo = item.getContentType();
            long tamanho = item.getSize();                    
            
           
            
            //processa os arquivo de upload
            if(!item.isFormField()){   
            File f = new File(getServletContext().getRealPath("/")+item.getName());   
            item.write(f);
            out.println("<b><br>Caminho:</b> " + caminho);
            out.println("<br/><b>Tipo:</b> " + tipo);
            out.println("<br/><b>Tamanho:</b> " + tamanho+" bytes"); 
            //f.delete();//caso queira deletar o arquivo
            }               
               
            
            }
            
        }catch(Exception ex){
        System.out.println("Erro: "+ex.getMessage());
        }
       
        }

Obrigado pela ajuda!!!

2 Respostas

skekeu

Alguem me ajuda? :smiley:

skekeu

Bom, depois de virar uma noite ... consegui resgatar os parametros do form :lol:
Caso alguem passe por situação semelhante, vou deixar o código aqui. É bem simples, só pra estudo mesmo, mas dá uma noção do que fazer

boolean isMultipart = FileUpload.isMultipartContent(request);
       
        if(isMultipart){
        
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);         
        
        String parametro=null;
        File f=null;
        
        try{
            //cria uma lista de items e percorre a lista
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            
            while(iter.hasNext()){
            FileItem item = (FileItem)iter.next();
            
            //pega os dados do arquivo, nome, tipo, tamanho ....
            String caminho = item.getName(); //em alguns browsers só retorna o nome do arquivo
            String tipo = item.getContentType();
            long tamanho = item.getSize();   
            
            //converte byte para megabyte
            long megabyte = 1024L * 1024L;
            double tamanhoEmMegabyte = (double) tamanho / megabyte;
            //formata o valor do megabyte
            NumberFormat nf = NumberFormat.getInstance();
            nf.setMinimumFractionDigits(2);
            nf.setMaximumFractionDigits(2);       
            
            //processa os campos normais do form
            if(item.isFormField()){
                
                //busca dados de um campo com o nome teste (aqui, um input de texto no formulario .jsp)
                if(item.getFieldName().equals("teste")){
                    //pega o valor em String do campo teste e passa para o parametro 
                    parametro = item.getString();
                }
                
            }            
            
            //processa os arquivo de upload
            if(!item.isFormField()){
                
            //pega somente o nome do arquivo - isso pq alguns browsers passam o path completo no item.getName(), o que vai gerar erro
            String nome = item.getName();
            String arq[] = nome.split("\\\\");
            for(int i=0; i<arq.length; i++){
            nome = arq[i];
            }
            
            //cria o arquivo no diretório raiz do projeto
            f = new File(getServletContext().getRealPath("/")+nome);   
            //grava o arquivo
            item.write(f);
            out.println("<b><br>Caminho:</b> " + caminho+"<i> (alguns browsers passam só o nome do arquivo)</i>");
            out.println("<b><br>Só o nome do arquivo:</b> " + nome);
            out.println("<br/><b>Tipo:</b> " + tipo);
            out.println("<br/><b>Tamanho:</b> " + nf.format(tamanhoEmMegabyte)+" MB");
            out.println("<b><br>Salvo em:</b> " + getServletContext().getRealPath("/"));              
            }        
            
            }
            
          //Demais métodos do servlet
          out.print("<br/><b>Parametro 1:</b> "+parametro);
          //f.delete();
                    
          
        }catch(Exception ex){
        System.out.println("Erro: "+ex.getMessage());
        }
       
        }
Criado 23 de fevereiro de 2010
Ultima resposta 25 de fev. de 2010
Respostas 2
Participantes 1