Erro em upload de imagem com FileUpload

5 respostas
I

Prezados,

Estou tentando fazer upload de imagem, copiar para um diretório e salvar o path no banco, mas quando submeto o form aparece a msg abaixo:

O que pode ser?

HTTP Status 404 - /projeto/jsp/produto/servletupload

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

type Status report

message /projeto/jsp/produto/servletupload

description The requested resource (/abrasivosrecreio/jsp/produto/servletupload) is not available.

upload.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form id="formImagem" name="formImagem" method="post" action="servletupload" enctype="multipart/form-data">
<input type="hidden" id="tipoForm" name="tipoForm" value="imagem">
<input name="imagem" type="file" accept="image/jpeg; image/gif; image/bmp; image/png" id="imagem" class="dados" maxlength="60" tabindex="1" value="c:/" style="position:absolute; top:23px; left:12px;  width:500px; ">
<input type="submit" id="upload" name="upload" tabindex="2" style="position:absolute; top:20px; left:532px;">
</form>
</body>
</html>

ServletUpload.java

package upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.ImageIcon;

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

import br.com.abrasivosrecreio.jdbc.ConnectionFactory;

public class ServletUpload extends HttpServlet{

	private static final long serialVersionUID = 1L;

	public void init() throws ServletException {

	}

	//Process the HTTP Post request

	public void doPost(HttpServletRequest request, HttpServletResponse response) 

	throws ServletException, IOException {

		doGet(request, response);

	}


	//Process the HTTP Get request

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		boolean isMultiPart = FileUpload.isMultipartContent(request);

		if (isMultiPart) {

			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);

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

					}

					if (!item.isFormField()) {

						if (item.getName().length() > 0) {

							this.inserirImagemDiretorio(item);

						}

					}

				}

			} 

			catch (FileUploadException ex) {

				ex.printStackTrace();

			} 

			catch (Exception ex) {

				ex.printStackTrace();

			}

		}

	}


	private void inserirImagemDiretorio(FileItem item) throws IOException, SQLException {


			//Pega o diretório /logo dentro do diretório atual de onde a 
			
			//aplicação está rodando
			
			String caminho = getServletContext().getRealPath("/logo") + "/";						
			
			// Cria o diretório caso ele não exista
			
			File diretorio = new File(caminho);
			
			if (!diretorio.exists()){
			
				diretorio.mkdir();
			
			}			
			
			// Mandar o arquivo para o diretório informado
			
			String nome = item.getName();
			
			String arq[] = nome.split("\\\\");
			
			for (int i = 0; i < arq.length; i++) {
			
				nome = arq[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();

			
			//Guarda no banco de dados o endereço para recuperação da imagem
		
			Connection conn = ConnectionFactory.getConnection();
			PreparedStatement pstmt = null;
			int resultado = 0;
			
			
			//Connection conexao = null;
			//PreparedStatement declaracao = null;
			
			String sql = "INSERT INTO tabelateste (codigo, imagem) VALUES(?, ?)";
									
			try {
			
				pstmt = conn.prepareStatement(sql);
				pstmt.setInt(1, 1); // codigo 1			
				pstmt.setString(2, caminho);			
				resultado = pstmt.executeUpdate();
	
			
			} catch (SQLException sqlEx) {
			
				Throwable ex = null;
				ex.printStackTrace();
			
			} catch (Exception ex) {
			
				ex.printStackTrace();
			
			}

	}
	
	
	public ImageIcon recuperaImagemDiretorio() throws SQLException {

		 
				Connection conn = ConnectionFactory.getConnection();
				Statement declaracao = null;
		        ResultSet resultado = null;
		        StringBuffer sql = new StringBuffer();

		        sql.append("SELECT imagem FROM tabelateste WHERE codigo = 1");

		        ImageIcon imagem = null;

		        try {

		            declaracao = (Statement) conn.createStatement();

		            resultado = declaracao.executeQuery(sql.toString());

		            if (resultado.next()) {	 

		            	String caminhoImagem = resultado.getString("imagem");

		                if (caminhoImagem!=null){

		                    imagem = new ImageIcon(caminhoImagem);

		                }  

		          }

		        } catch (SQLException ex) {

		            ex.printStackTrace();

		        } catch (Exception ex) {

		            ex.printStackTrace();

		        }

		        return imagem;

		    }	

}

Vlw amigos…

5 Respostas

UMC

Cara na action do form HTML esta assim: servletupload e o nome da Servlet esta assim: ServletUpload
então na action HTML coloca o nome igual a da Servlet pra ver!

se não me engano tem haver!
olha o case!rsrs

PS. Se não for isso coloca o erro que da no console!

vlw

I

Amigo UMC,

Já tinha testado colocar ServletUpload na action do form, mas tb não funfa. Continua dando o mesmo erro. No console não dá erro, ele não chega nem a entrar no Servlet.

HTTP Status 404 - /projeto/jsp/produto/ServletUpload

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

type Status report

message /projeto/jsp/produto/ServletUpload

description The requested resource (/abrasivosrecreio/jsp/produto/ServletUpload) is not available.


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

Apache Tomcat/5.5.12
UMC

Tem como você tirar um PrintScreen da sua estrutura!
isso é o package certo?

/abrasivosrecreio/jsp/produto/

vlw

I

O arquivo ServletUpload.java está no package “upload”. Já o arquivo upload.jsp está em “WebContent\jsp\produto”

UMC

Pois é ai mora o problema!
faça o seguinte copie essa JSP para WebContent e execute!

Assim como você esta fazendo ele esta achando que a Servlet esta junto na mesma pasta com a JSP

vlw

Criado 23 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 5
Participantes 2