File Upload - RESOLVIDO

9 respostas
G

galerinha estou precisando fazer um upload em um arquivo mas estou tenho dificudade em usar o File Upload do apache, por um acaso tem como alguem me ajudar, achei esse código na net mas quando ele faz a verificação no if (ServletFileUpload.isMultipartContent(request)) ele retorna false e não faz nada, alguem sabe me dizer o que eu preciso fazer para que esse código funcione

ou se alguem tiver um código mais simples para me ajudar ficarei grato…

out.println(ServletFileUpload.isMultipartContent(request));
            if (ServletFileUpload.isMultipartContent(request)){
              ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
              List fileItemsList = servletFileUpload.parseRequest(request);

              String optionalFileName = "";
              FileItem fileItem = null;

              Iterator it = fileItemsList.iterator();
              while (it.hasNext()){
                FileItem fileItemTemp = (FileItem)it.next();
                if (fileItemTemp.isFormField()){

                  if (fileItemTemp.getFieldName().equals("filename"))
                    optionalFileName = fileItemTemp.getString();
                }
                else
                  fileItem = fileItemTemp;
              }

              if (fileItem!=null){
                String fileName = fileItem.getName();

                /* Save the uploaded file if its size is greater than 0. */
                if (fileItem.getSize() > 0){
                  if (optionalFileName.trim().equals(""))
                    fileName = FilenameUtils.getName(fileName);
                  else
                    fileName = optionalFileName;

                  String dirName = "/file_uploads/";

                  File saveTo = new File(dirName + fileName);
                  try {
                    fileItem.write(saveTo);

                  }
                  catch (Exception e){

                  }
                }
              }
            }

9 Respostas

B

Verifique se seu formulário HTML esta com a propriedade enctype=“multipart/form-data”.

<form name="Attach" id="attach" enctype="multipart/form-data" 
    method="POST" action="servletDeUlpoad">
   <input type="file" name="file1" size="20" >
</form>
F

o método do form que chama a servlet tem q ser POST

G

velhinho eu sei que isso é básico mas velho não entendi o pq disso

o meu formulário e o meu Servlet era get ai mudei para post so que agora da erro

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException
	cadastraimagem.doPost(cadastraimagem.java:29)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.17

puxa vida pq da isso, sendo que só mudei isso e pelo que eu sei isso só muda o method, o jeito de mandar os dados.

G

galerinha achei o nullPointer valew, agora é outro erro :frowning:

G
Gu:
galerinha estou precisando fazer um upload em um arquivo mas estou tenho dificudade em usar o File Upload do apache, por um acaso tem como alguem me ajudar, achei esse código na net mas quando ele faz a verificação no if (ServletFileUpload.isMultipartContent(request)) ele retorna false e não faz nada, alguem sabe me dizer o que eu preciso fazer para que esse código funcione

ou se alguem tiver um código mais simples para me ajudar ficarei grato...

out.println(ServletFileUpload.isMultipartContent(request));
            if (ServletFileUpload.isMultipartContent(request)){
              ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
              List fileItemsList = servletFileUpload.parseRequest(request);

              String optionalFileName = "";
              FileItem fileItem = null;

              Iterator it = fileItemsList.iterator();
              while (it.hasNext()){
                FileItem fileItemTemp = (FileItem)it.next();
                if (fileItemTemp.isFormField()){

                  if (fileItemTemp.getFieldName().equals("filename"))
                    optionalFileName = fileItemTemp.getString();
                }
                else
                  fileItem = fileItemTemp;
              }

              if (fileItem!=null){
                String fileName = fileItem.getName();

                /* Save the uploaded file if its size is greater than 0. */
                if (fileItem.getSize() > 0){
                  if (optionalFileName.trim().equals(""))
                    fileName = FilenameUtils.getName(fileName);
                  else
                    fileName = optionalFileName;

                  String dirName = "/file_uploads/";

                  File saveTo = new File(dirName + fileName);
                  try {
                    fileItem.write(saveTo);

                  }
                  catch (Exception e){

                  }
                }
              }
            }
Galerinha aqui nesse ponto do código
if (fileItemTemp.getFieldName().equals("filename"))
filename entre asterisdtico é o nome do campo do meu formulário em html?
G

Bom dia a todos.

Galerinha consegui fazer com que o File Upload funcione. Porém não estou conseguindo chamar um outro campo do formulário que está no meu jsp em forma de HTML, preciso do valor desse campo para iserir a imagem no banco, por um acaso alguem sabe o que eu preciso fazer para que eu consiga colocar um outro valor no meu servlet que executa o File Upload?

A forma que eu estava tentando chamar o campo do formulario era através do request.getParameter, mas ele da null…

fico grato se alguem puder me ajudar…

G

galerinha estou com um probleminha para chamar um segundo campo com file upload. Vou postar o codigo aqui e se alguem souber e quiser me ajudar ficarei grato

da forma que fiz so consigo pegar p valor do campoid, o valor do campoimagem da null;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FilenameUtils;
import java.util.List;
import java.io.File;
import java.lang.Exception;

public class cadastraimagem extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        
        int optionalFileNameid = 0;
        HttpSession sessao = null;
        String fileName = null;
        response.setContentType("text/html;");
        PrintWriter out = response.getWriter();

        Connection con;
        Statement stm;
        ResultSet rs;
        try{
            if (ServletFileUpload.isMultipartContent(request)){
              ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
              List fileItemsList = servletFileUpload.parseRequest(request);

              String optionalFileName = "";

              FileItem fileItem = null;

              Iterator it = fileItemsList.iterator();
              do{
                FileItem fileItemTemp = (FileItem)it.next();
                if (fileItemTemp.isFormField()){

                  if (fileItemTemp.getFieldName().equals("campoid"))
                    optionalFileNameid = Integer.parseInt(fileItemTemp.getString());
                  if (fileItemTemp.getFieldName().equals("campoimagem"))
                    optionalFileName = fileItemTemp.getString();
                }
              }while (it.hasNext());

              if (fileItem!=null){
                fileName = fileItem.getName();

                /* Save the uploaded file if its size is greater than 0. */
                if (fileItem.getSize() > 0){
                  if (optionalFileName.trim().equals(""))
                    fileName = FilenameUtils.getName(fileName);
                  else
                    fileName = optionalFileName;
                    fileName = fileName.substring(fileName.lastIndexOf("'\'")+1);

                  String dirName = "G:/java_www/gestaosindicato/web/imagem/";

                  File saveTo = new File(dirName + fileName);
                  try {
                    fileItem.write(saveTo);

                  }
                  catch (Exception e){

                  }
                }
              }
            }


            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:porta;databaseName=nomebanco;","usuario","senha");
            stm = con.createStatement();
            
                String sql = "UPDATE RESCISAO SET IMGRESCISAO= '"+fileName+"' WHERE CODIGO='"+optionalFileNameid+"'";
                out.println("sql "+sql);
                stm.executeUpdate(sql);
//                out.println("<script>window.alert('Imagem Inserida com Sucesso')</script>");
//                out.println("<script>document.location.href='cadastrarescisao.jsp'</script>");
        }catch(Exception e){
            out.println("Falha na conexão! erro: "+e.getMessage());
        }
   }
}
D

Então Gustavo,
dentro do seu while você faz uma condição se o campo é um formField, o que acontece é que os campos que são inputs do tipo “file”
não vem como form field, você deveria capturar o “campoimagem” em um else desse seu if.

Para exemplificar melhor (por que o texto acima está horrivel) você poderia fazer assim.

while (it.hasNext()){   
                FileItem fileItemTemp = (FileItem)it.next();   
        if (fileItemTemp.isFormField()){     
                  if (fileItemTemp.getFieldName().equals("campoid"))   
                    optionalFileNameid = Integer.parseInt(fileItemTemp.getString());   
                  if (fileItemTemp.getFieldName().equals("campoimagem"))   
                    optionalFileName = fileItemTemp.getString();   
        }else{
                    optionalFileName =  fileItemTemp.getName();
                    /* você pode aproveitar e  fazer o processo de gravar o arquivo no servidor aqui,
                        por que você vai precisar do ponteiro atual para o FileItem                       
                     */
        }   
}

Outra coisa usei uma while ao inves de um do while, por que se sua coleção vier vazia pode dar uma Exception desnecessaria

G

este código grava o nome da imagem no banco e na pasta escolhida…

Valew ddduran…

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FilenameUtils;
import java.util.List;
import java.io.File;
import java.lang.Exception;

public class cadastraimagem extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        HttpSession sessao = null;
        String fileName = null;

        int optionalFileNameid = 0;
        String optionalFileName = "";
        String optionalFile = "";
        response.setContentType("text/html;");
        PrintWriter out = response.getWriter();

        Connection con;
        Statement stm;
        ResultSet rs;
        try{
            if (ServletFileUpload.isMultipartContent(request)){
                ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
                List fileItemsList = servletFileUpload.parseRequest(request);

                FileItem fileItem = null;
                Iterator it = fileItemsList.iterator();
                
                while (it.hasNext()){     
                    FileItem fileItemTemp = (FileItem)it.next();     
                        if (fileItemTemp.isFormField()){     
                            if (fileItemTemp.getFieldName().equals("campoid"))     
                                optionalFileNameid = Integer.parseInt(fileItemTemp.getString());     
                            }else{ fileItemTemp.getFieldName().equals("campoimagem"); 
                                optionalFile = fileItemTemp.getString();
                                optionalFileName = fileItemTemp.getName();
                                optionalFileName = optionalFileName.substring(optionalFileName.lastIndexOf("/")+11);                        

                                fileItem = fileItemTemp;
                                    if(fileItem!=null){
                                        fileName = fileItem.getName();

                                    if ( fileItem.getSize() >0){
                                        if (optionalFile.trim().equals(""))
                                            fileName = FilenameUtils.getName(fileName);
                                        else
                                            fileName = optionalFileName;

                                            String dirName = "G:/java_www/gestaosindicato/web/imagem/";

                                            File saveTo = new File(dirName + fileName);
                                            try {
                                                fileItem.write(saveTo);
                                            }catch (Exception e){
                                            }
                                        }
                                    }
                            }        
                }
            }


            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:PORTA;databaseName=BANCO;","USUARIO","SENHA");
            stm = con.createStatement();
            
            String sql = "UPDATE RESCISAO SET IMGRESCISAO= '"+optionalFileName+"' WHERE CODIGO='"+optionalFileNameid+"'";
            stm.executeUpdate(sql);
            out.println(sql);
//          out.println("<script>window.alert('Imagem Inserida com Sucesso')</script>");
//          out.println("<script>document.location.href='cadastrarescisao.jsp'</script>");
        }catch(Exception e){
            out.println("Falha na conexão! erro: "+e.getMessage());
        }
   }
}
Criado 23 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 9
Participantes 4