File Upload - RESOLVIDO

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){

                  }
                }
              }
            }

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>
1 curtida

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

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.

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

[quote=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…

[code]
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){

              }
            }
          }
        }

[/code][/quote]

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?

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…

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());
        }
   }
}

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 já 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

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());
        }
   }
}