Ajuda upload+JSP

Pessoal do grupo… Estou tendo dificuldades para fazer um upload simples com JSP…

Não sei se estou esquecendo de alguma coisa mas, quanto altero o enctype do form para multipart/form-data, simplesmente meu servlet não consegue recuperar via request.getParameter(“parâmetro”), um parâmetro da página. Simplificando, se fosse usar esse método de upload com um servlet que fizesse um cadastro de um funcionário por exemplo com upload d foto, o servlet só iria recuperar o arquivo, os dados do funcionário não são recuperados via request.getParameter().

Estou colocando meu servlet e minha jsp de exemplo aqui para que vcs possam ver… qualquer ajuda eh bem vinda e dsd jah agradeço.

upload.jsp
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1”%>

Insert title here Nome: Arqiuvo:

UploadServlet.java

package upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.FileUpload;

/**

  • Servlet implementation class for Servlet: UploadServlet

*/
public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;

public UploadServlet () {
	super();
}   	 	

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	try {
		upload(request, response);
		String nome = request.getParameter("nome");
		System.out.println("nome: " + nome);
	} catch (Exception e) {
		e.printStackTrace();
	}
	request.getRequestDispatcher("index.jsp").forward(request, response);
}   	  	    

public void upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	boolean isMultiPart = FileUpload.isMultipartContent(request);
	if (isMultiPart) {
		System.out.println("upload");
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        String formulario = "";
        System.out.println(formulario);
        try {
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                if (item.getFieldName().equals("tipoForm")) {
                    formulario = item.getString();
                    System.out.println("tipoForm");
                }
                if (!item.isFormField()) {
                    if (item.getName().length() > 0) {
                    	System.out.println("chama método");
                        this.inserirImagemDiretorio(item);
                    }
                }
            }
        } catch (FileUploadException ex) {
        	ex.printStackTrace();
        } catch (Exception ex) {
        	ex.printStackTrace();
        }
    }
}

private void inserirImagemDiretorio(FileItem item) throws IOException {
	String caminho = "D:/Workspace/upload/WebContent/arquivos/";
	
	File diretorio = new File(caminho);
	System.out.println("diretorio: " + diretorio.getAbsolutePath());
	if (!diretorio.exists()) diretorio.mkdir();
	
	String nome = item.getName();
	String arg[] = nome.split("\\\\");
	for (int i = 0; i < arg.length; i++) nome = arg[i];
	
	File file = new File(diretorio, nome);
    FileOutputStream output = new FileOutputStream(file);
    InputStream is = item.getInputStream();
    byte[] buffer = new byte[2048];
    int nLidos;
    while ((nLidos = is.read(buffer)) >= 0) {
        output.write(buffer, 0, nLidos);
    }
	output.flush();
	output.close();
}

}

O upload funciona direito, mas não recupera o nome via request.getParameter().

Quando vc altera o form para multpart o cabeçalho de sua request vem diferente, use a biblioteca FileUpload da apache , com ela vc também consegue recuperar seus parâmetros.

http://commons.apache.org/fileupload/

[]'s

mas jah estou usando o fileupload da apache… como recupero meus parâmetros com ela?

Peguei do exemplo: http://commons.apache.org/fileupload/using.html

// Parse the request
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next(); 
    if (item.isFormField()) {  //Aqui ele verifica se é um field do seu form
         String name = item.getFieldName();
         String value = item.getString();
    } else {
        //operacoes para upload
    }
}

[]'s

blz cara deu certo… obrigado pela ajuda

estou com proble ao tentar usar esse codigo ta dando o seguinte erro.

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: PWC1392: Error instantiating servlet class br.com.imageclick.servlet.uploadServlet

root cause

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_02 logs.

MAS EU TENHO A BIBLIOTECA DO FILEUPLOAD E ME CERTIFIQUEI DO ARQUIVO “FileUploadException” ELE TA LÁ.

Aguardo Ajuda.

Ou se alguem tiver um tutorial de como fazer eu agradeceria.

Abraço

[quote=lcegatti]Quando vc altera o form para multpart o cabeçalho de sua request vem diferente, use a biblioteca FileUpload da apache , com ela vc também consegue recuperar seus parâmetros.

http://commons.apache.org/fileupload/

[]'s[/quote]

Como faço pra recuperar múltiplos parâmetros nesse código aqui:

index.jsp

[code]<% String id = “1”; %>

Exemplo Upload com Servlet (upload.java)

[/code]

upload.java

[code]package uploader;

import java.io.;
import java.util.
;
import javax.servlet.;
import javax.servlet.http.
;

public class upload extends HttpServlet {

private static List parseRequest(HttpServletRequest request) {
    throw new UnsupportedOperationException("Not yet implemented");
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        
      String codigo = request.getParameter("id");  
        
      String nomeParametro = "file";
      String id = request.getParameter(nomeParametro);

        out.println("O código da páigna é: "+codigo); // imprime id nula
  
 File dir = new File(getServletContext().getRealPath("/")+ "eventos");   

 String contentType = request.getContentType();  

 if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {  

          DataInputStream in = new DataInputStream(request.getInputStream());  

             int formDataLength = request.getContentLength();  
             byte dataBytes[] = new byte[formDataLength];  
             int byteRead = 0;  
             int totalBytesRead = 0;  

           while (totalBytesRead < formDataLength) {  

               byteRead = in.read(dataBytes, totalBytesRead, formDataLength);  
                  totalBytesRead += byteRead;  
             }  

           String file = new String(dataBytes);  
           String saveFile = file.substring(file.indexOf("filename=\"") + 10);  
             saveFile = saveFile.substring(0, saveFile.indexOf("\n"));  
             saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));  

             int lastIndex = contentType.lastIndexOf("=");  
             String boundary = contentType.substring(lastIndex + 1,contentType.length());  

             int pos;  

          pos = file.indexOf("filename=\"");  
          pos = file.indexOf("\n", pos) + 1;  
          pos = file.indexOf("\n", pos) + 1;  
          pos = file.indexOf("\n", pos) + 1;  

            int boundaryLocation = file.indexOf(boundary, pos) - 4;  
            int startPos = ((file.substring(0, pos)).getBytes()).length;  
            int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;  

          String filepath = dir+ "/" +saveFile;  
             
          FileOutputStream fileOut = new FileOutputStream(filepath);  
             fileOut.write(dataBytes, startPos, (endPos - startPos));  
             fileOut.flush();  
             fileOut.close();  

/*      try {  
           Connection conn = Conexao.getConection();  

          // gravando no banco de dados  
           PreparedStatement pstmt =  
           conn.prepareStatement("INSERT INTO images_001 (url_image) values ( ? )  WHERE codigoTopic = ? ");  

           pstmt.setObject(1, saveFile);  
           pstmt.setObject(2, id);  
           pstmt.execute();  
           
           out.println("<h1>A imagem do upload foi: " + saveFile+"</h1>");  // não imprime na tela
           out.println("<img src=\"eventos/" +saveFile+ "\" width=\"300\" height=\"300\" />"); // não imprime na tela
           out.println("Arquivo enviado com sucesso"); // não imprime na tela

           } catch (SQLException sqlex) {  
              out.println("Não foi possível selecionar o nome do diretórios<br>" + sqlex);  
              sqlex.printStackTrace();  
           }    */
      }    
    } finally { 
        out.close();
    }
} 

// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
/** 
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
} 

/** 
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}

/** 
* Returns a short description of the servlet.
*/
@Override
public String getServletInfo() {
    return "Short description";
}
// </editor-fold>

}
[/code]

Caraaaaaalhoooooooooooo!!! Deuuuuu ceeeertoooooooooooooooo!!!111onze

Ok sei que é chato ressucitar tópicos mas estou com uma dúvida ao tentar executar o código acima, eu não estou conseguindo encontrar a minha servlet toda vez que procuro da o seguinte erro

HTTP Status 404 - /upload

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

type Status report

message /upload

description The requested resource (/upload) is not available.


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

Apache Tomcat/6.0.14

estou utilizando o netbeans se alguém poder dar uma ajuda estou na escuta aqui

O meu também funcionou vlw galera.

e necessario informar ao web.xml na pasta Web-inf.
Informando ao xml da existencia de seu Servlet.

[quote=eduardoluiz.ribeiro]Ok sei que é chato ressucitar tópicos mas estou com uma dúvida ao tentar executar o código acima, eu não estou conseguindo encontrar a minha servlet toda vez que procuro da o seguinte erro

HTTP Status 404 - /upload

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

type Status report

message /upload

description The requested resource (/upload) is not available.


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

Apache Tomcat/6.0.14

estou utilizando o netbeans se alguém poder dar uma ajuda estou na escuta aqui[/quote]