Upload de imagens com Servlet e Jsp

Upload de imagens com Servlet e Jsp. Atendendo a pedidos da galera que está começando a se aventurar no mundo web do Java hoje o post mostra um exemplo bem genérico de upload de arquivos com JSP e Servlet, o exemplo conta com um formulário onde é possível enviar o arquivo e visualizar a imagem que foi enviada e conta com a Servlet responsável por realizar todo o trabalho. Abaixo podem conferir o resultado e o link de download do projeto está disponível ao final do post.

Projeto novo – Upload com Ajax e Servlet

Vídeo novo de upload bem mais legal no link https://www.javaavancado.com/upload-de-imagens-com-ajax-e-servlets/

Bibliotecas usadas

commons-fileupload-1.3.2.jar
commons-io-2.5.jar

Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>imagens_servlet</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

O formulário em JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Imagens com servlet</title>
</head>
<body>
	<form action="upload" method="post" enctype="multipart/form-data">
		<input type="file" name="file" id="file"/> 
		<input type="submit" value="Enviar" />
	</form>
	<label>${message}</label>
	<br/>
	<br/>
	<br/>
	<br/>
	<form action="upload" method="get" >
		<input type="submit" value="Visalizar imagem" />
	</form>
</body>
</html>

Servlet responsável pela manipulação da imagem

package upload;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

@WebServlet("/upload")
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public Upload() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		/*Obtem o caminho relatorio da pasta img*/
		String path = request.getServletContext().getRealPath("img")+ File.separator;
		
		File files = new File(path);
		response.setContentType("image/jpeg");
		
		/*Mostra o arquivo que está na pasta img onde foi realizado o upload*/
		for (String file : files.list()) {
			File f = new File(path + file);
			BufferedImage bi = ImageIO.read(f);
			OutputStream out = response.getOutputStream();
			ImageIO.write(bi, "jpg", out);
			out.close();
		}
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		/*Identifica se o formulario é do tipo multipart/form-data*/
		if (ServletFileUpload.isMultipartContent(request)) {
			try {
				/*Faz o parse do request*/
				List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

				/*Escreve a o arquivo na pasta img*/
				for (FileItem item : multiparts) {
					if (!item.isFormField()) {
						item.write(new File(request.getServletContext().getRealPath("img")+ File.separator + "uploadfile"));
					}
				}

				request.setAttribute("message", "Arquivo carregado com sucesso");
			} catch (Exception ex) {
				request.setAttribute("message", "Upload de arquivo falhou devido a "+ ex);
			}

		} else {
			request.setAttribute("message","Desculpe este Servlet lida apenas com pedido de upload de arquivos");
		}

		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}

}

Caminho da gravação da imagem

Usando o servidor tomcat podemos encontrar a imagem dentro da pasta compilada do projeto dentro do servidor, neste caso o caminho seria apache-tomcat-7.0.63/wtpwebapps/imagens_servlet/img.

Vídeo do projeto

downloadDownload do exemplo


Acesse
Cursos e Projetos
Java
Acesse
Outros Cursos
PHP MySQL Android
Acesse
Encomende um Projeto
Feito pra Você
Acesse
Tire as Dúvidas On-line
Consultor
Acesse
Aulas de Java só suas
Encomende Agora
Acesse
Dividindo Conhecimento
Posts e Tutoriais
Acesse
Sites e Parceiros
Associados
Acesse
Menu Inicial
Home Page

9 Respostas do Autor

  1. Johnny disse:

    List multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

    neste ponto, o parametro aparece que tem q ser um RequestContext
    o NetBeans sugere a conversão de Request para RequestContext

    mas daí da um
    “Upload de arquivo falhou devido a java.lang.RuntimeException: Uncompilable source code – Erroneous sym type: org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload.parseRequest “

  2. WALLACE BRUNO GENTIL disse:

    Alex como faço um insert da imagem dentro do banco (no caso o caminho dela pra vincular a um usuário/produto)?

  3. Itagiba disse:

    Como que eu faço com esse .xml, tenho que criar uma nova web.xml ou apenas adicionar as linhas dentro do meu.
    Porque quando adiciono dá erro no web.xml e o import:
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    Dá erro dentro da minha servlet upload dizendo que não existe.

    Já adicionei as bibliotecas
    commons-fileupload-1.3.2.jar
    commons-io-2.5.jar
    ?.

  4. Elcio disse:

    Olá Alex, eu não consegui entender o trecho que segue o comentário “/*Escreve a o arquivo na pasta img*/”, vi que funciona, porém não entendi. Você poderia explicar melhor?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Instrutor Java Quer se tornar aluno VIP? CLIQUE AQUI!
Instrutor Java Alex Fernando Egidio
Autor, criador e fundador do Java Avançado Cursos TI. Atua no mercado como desenvolvedor e engenheiro de sistemas em Java é apaixonado por desenvolvimento web em Java e pela “mágica” que seus frameworks trazem para o dia a dia de nós desenvolvedores.
Com mais de 10 anos de experiência ajuda programadores do Brasil todo a se tornarem profissionais.