Problemas com upload no jsp

6 respostas
EHS

Estou tentando fazer o upload de uma imagem, mas sem sucesso, abaixo segue o código e o erro.

<form action="produto" method="POST" enctype="multipart/form-data">
            Nome:
            <input type="text" name="nome"/>
            <br/>
            Descrição:
            <input type="text" name="descricao"/>
            <br/>
            Foto:
            <input type="file" name="foto"/>
            <br/>
            <input type="submit" value="Salvar"/>
        </form>
servelet
Usuario usuario = new Usuario();
        UsuarioDAO usuarioDAO = new UsuarioDAO();

        String nome = request.getParameter("nome");
        usuario.setLogin(nome);
        String descricao = request.getParameter("descricao");
        usuario.setSenha(descricao);

        FileItemFactory factory =  new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            List items = upload.parseRequest(request);
            Iterator it = items.iterator();
            while(it.hasNext()) {
                FileItem item = (FileItem) it.next();
                if (item.isFormField()) {  //Aqui ele verifica se é um field do seu form
                    String name = item.getFieldName();
                    String value = item.getString();
                }
            }
        } catch (FileUploadException ex) {
            Logger.getLogger(produtoController.class.getName()).log(Level.SEVERE, null, ex);
        }

Antes de tentar fazer o upload eu tentei salvar apenas o nome e descrição e funcionou, agora debuguei e percebi que as variáveis nome e descrição estão vindo como null também, não entendi o que o upload interfere nelas :?

6 Respostas

EHS

Descobri que o que fazia as variáveis ficarem vazias era o ENCTYPE do form, mas porque eu naum entendi, pois onde pesquisei falaram para colocar o ENCTYPE para fazer o upload.

EHS
EHS:
Estou tentando fazer o upload de uma imagem, mas sem sucesso, abaixo segue o código e o erro.
<form action="produto" method="POST" enctype="multipart/form-data">
            Nome:
            <input type="text" name="nome"/>
            <br/>
            Descrição:
            <input type="text" name="descricao"/>
            <br/>
            Foto:
            <input type="file" name="foto"/>
            <br/>
            <input type="submit" value="Salvar"/>
        </form>
servelet
Usuario usuario = new Usuario();
        UsuarioDAO usuarioDAO = new UsuarioDAO();

        String nome = request.getParameter("nome");
        usuario.setLogin(nome);
        String descricao = request.getParameter("descricao");
        usuario.setSenha(descricao);

        FileItemFactory factory =  new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {
            List items = upload.parseRequest(request);
            Iterator it = items.iterator();
            while(it.hasNext()) {
                FileItem item = (FileItem) it.next();
                if (item.isFormField()) {  //Aqui ele verifica se é um field do seu form
                    String name = item.getFieldName();
                    String value = item.getString();
                }
            }
        } catch (FileUploadException ex) {
            Logger.getLogger(produtoController.class.getName()).log(Level.SEVERE, null, ex);
        }
erro
javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	controller.produtoController.doPost(produtoController.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	controller.produtoController.doPost(produtoController.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Antes de tentar fazer o upload eu tentei salvar apenas o nome e descrição e funcionou, agora debuguei e percebi que as variáveis nome e descrição estão vindo como null também, não entendi o que o upload interfere nelas :?

Putz, vi que naum tinha postado o erro e apertei sem querer no botão citar e naum em editar.....shuahsuahsuahuhas

rock

Pela exception vc precisa adicionar a biblioteca commons-io no seu classpath/projeto. Talvez precise de outras bibliotecas. Se ocorrer outros ‘java.lang.NoClassDefFoundError’, tente procurar em www.jarfinder.com a biblioteca da classe…

Sobre nome e descrição vindo null, vc precisa recuperar de outra forma neste caso. Utilize a forma que está no comentário:

if (item.isFormField()) { //Aqui ele verifica se é um field do seu form String name = item.getFieldName(); String value = item.getString(); }

só precisa verificar se name é igual a “nome” ou “descricao” e utilizar o value.

EHS

Eu adicionei a biblioteca commons-fileupload 1.2.2, pelo que pesquisei é só essa que precisa, ou tem mais alguma ??

well

Amigo tenta fazer o upload da foto separado dos outros campos. cria um form só para ele… da uma olhada na apostiva FJ28 da Caelum é gratuita e tem uma parte que fala sobre upload de imagens… vlw…

EHS

Mas eu queria que ficasse no mesmo form, tipo se eu colocar em outro vou ter que primeiro salvar o nome e descrição para depois salvar a imagem, fica ruim para o usuário daí. Dei uma olhada na apostila mas ela mostra como fazer junto com o vRaptor e eu não sei usar ele e não tenho muito tempo para aprender agora, então teria que ser sem ele.

Criado 10 de maio de 2011
Ultima resposta 11 de mai. de 2011
Respostas 6
Participantes 3