Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Upload arquivos com JSP

Galera, boa noite.

Vi alguns exemplos na internet de upload de arquivos com JSP, porém, não obtive sucesso ao implementar.

Quando vou inserir um cliente e seleciono meu arquivo para upload, no caso uma imagem, no Servlet não entra no IF:

if(ServletFileUpload.isMultipartContent(req))

Alguém saberia o porque ou tem algum exemplo bacana de upload com JSP?

Abaixo minha classe .JSP e meu Servlet. Usei a estrutura do projeto apresentado no curso de JSP do Alura.

JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<body>

    <h2>Inserir Novo Cliente:</h2>

    <form action="executar" method="POST">
        <input type="hidden" name="tarefa" value="NovoCliente">
            Nome: <input type="text" name="nome">
            Documento: <input type="text" name="documento">
            Tipo Cliente: 
            <select name="tipo">
                <c:forEach var="t" items="${tiposCliente}">
                     <option value="${t}">${t} </option>
                 </c:forEach>
            </select>
            Avatar: <input name="avatar" type="file">
        <input type="submit" value="Enviar">
    </form>
    <br><br>

    <c:url value="/index.jsp" var="urlIndex"/>
    <a href="${urlIndex}">Voltar a pagina principal</a>

</body>
</html>

Servlet:

package br.com.bariotti.cadastroclienteweb.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import br.com.bariotti.cadastroclienteweb.controller.ClienteController;
import br.com.bariotti.cadastroclienteweb.enums.TIPO_CLIENTE;
import br.com.bariotti.cadastroclienteweb.interfaces.Tarefa;
import br.com.bariotti.cadastroclienteweb.model.Cliente;

@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5)
public class NovoCliente implements Tarefa {

    public String executa(HttpServletRequest req, HttpServletResponse resp) throws Exception {

        String nome = req.getParameter("nome");
        String documento = req.getParameter("documento");
        String tipoClienteAux = req.getParameter("tipo");

        TIPO_CLIENTE tipoCliente;

        if(tipoClienteAux.equals(TIPO_CLIENTE.PESSOA_FISICA.toString()))
            tipoCliente = TIPO_CLIENTE.PESSOA_FISICA;
        else
            tipoCliente = TIPO_CLIENTE.PESSOA_JURIDICA;

        Cliente cliente = new Cliente(nome, documento, tipoCliente);

        ClienteController.inserirCliente(cliente);


        if(ServletFileUpload.isMultipartContent(req))
        {
            try
            {
                List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(req);

                for(FileItem item : multiparts){
                    if(!item.isFormField()){
                        String name = new File(item.getName()).getName();
                        item.write( new File(req.getServletContext().getRealPath("/resources/imagens") + File.separator + name));
                    }
                }

                System.out.println("SUCESSO ao realizar o upload do arquivo ");
            }
            catch(Exception ex)
            {
                System.out.println("Erro ao gravar arquivo. ERRO:" + ex.getMessage());
            }        
        }
        else
            System.out.println("ELSE");


        return "/WEB-INF/novoCliente.jsp";
    }
}
1 resposta
solução!

Deu certo!

Como precisei adicionar "enctype="multipart/form-data" no meu formulário, ajustei minha .jsp e minha servlet. Após isso, funcionou:

JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<body>

    <h2>Inserir Novo Cliente:</h2>

    <form action="novoCliente" method="POST" enctype="multipart/form-data">
            Nome: <input type="text" name="nome">
            Documento: <input type="text" name="documento">
            Tipo Cliente: 
            <select name="tipo">
                <c:forEach var="t" items="${tiposCliente}">
                     <option value="${t}">${t} </option>
                 </c:forEach>
            </select>
            Avatar: <input name="avatar" type="file">
        <input type="submit" value="Enviar">
    </form>
    <br><br>

    <c:url value="/index.jsp" var="urlIndex"/>
    <a href="${urlIndex}">Voltar a pagina principal</a>

</body>
</html>

Servlet:

package br.com.bariotti.cadastroclienteweb.web;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
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;

import br.com.bariotti.cadastroclienteweb.controller.ClienteController;
import br.com.bariotti.cadastroclienteweb.enums.TIPO_CLIENTE;
import br.com.bariotti.cadastroclienteweb.model.Cliente;

@WebServlet("/novoCliente")
public class NovoCliente extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        boolean isMultipart = ServletFileUpload.isMultipartContent(req);

        String nome = null, documento = null, tipoClienteAux = null;

        TIPO_CLIENTE tipoCliente = null;

        FileItem imagem = null;

        try
        {
            if(isMultipart)
            {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);

                List<FileItem> items = upload.parseRequest(req);

                for(FileItem item : items)
                {
                    if(item.isFormField())
                    {

                        if(item.getFieldName().equals("nome"))
                            nome = item.getString();

                        if(item.getFieldName().equals("documento"))
                            documento = item.getString();

                        if(item.getFieldName().equals("tipo"))
                        {
                            tipoClienteAux = item.getString();

                            if(tipoClienteAux.equals(TIPO_CLIENTE.PESSOA_FISICA.toString()))
                                tipoCliente = TIPO_CLIENTE.PESSOA_FISICA;
                            else
                                tipoCliente = TIPO_CLIENTE.PESSOA_JURIDICA;
                        }
                    }
                    else
                    {
                        imagem = item;
                    }
                }

                Cliente cliente = new Cliente(nome, documento, tipoCliente);
                ClienteController.inserirCliente(cliente);

                File uploadFile = new File("C:\\Users\\Bariotti\\Desktop\\Estudo\\imagens\\" + cliente.getId() + ".jpg");
                imagem.write(uploadFile);

            }
        }
        catch(Exception ex)
        {
            System.out.println("ERRO: " + ex.getMessage());
        }

        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/novoCliente.jsp");
        dispatcher.forward(req, resp);
    }
}