[RESOLVIDO]exemplo de Upload(Funcional) e Duvida ao Carregar Imagem

15 respostas
D

Olá Pessoal esses dias estive com problemas como se fazer um Upload e consegui seguindo este livro
Desenvolvendo Aplicações Web com JSP Servlets JSF Hibernate EJB 3 Persistence e Ajax.therebels.Robertosilva

Agora minha duvida está em como carregar na JSP assim que eu escolher a imagem, e se alguem tem algum exemplo

Segue o Exemplo do Upload que funciona legalzinho h3h3:

Classe
package ni.pojos;

import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadBean {
    private DiskFileItemFactory fileUpload = new DiskFileItemFactory();
    private ServletFileUpload sfu = new ServletFileUpload(fileUpload);
    private String diretorio;
    private String filename;
    File dir = new File("C:/temp");

    public String getDiretorio() {
        return diretorio;
    }

    public void setDiretorio(String diretorio) {
        this.diretorio = diretorio;
    }

    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public DiskFileItemFactory getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(DiskFileItemFactory fileUpload) {
        this.fileUpload = fileUpload;
    }

    public ServletFileUpload getSfu() {
        return sfu;
    }

    public void setSfu(ServletFileUpload sfu) {
        this.sfu = sfu;
    }

    public boolean doFilePost(HttpServletRequest request, ServletContext context){
        if (request.getContentType() == null) 
            return false;
        if (!request.getContentType().startsWith("multipart/form-data"))
            return false;

        String path = context.getRealPath(getDiretorio());
        try{
            List list = sfu.parseRequest(request);
            Iterator iterator  = list.iterator();

            while (iterator.hasNext()){
                FileItem item = (FileItem)iterator.next();

                if (!item.isFormField()){
                    filename = item.getName();
                
                if ((filename != null) && (!filename.equals(""))){
                    filename = (new File(filename)).getName();
                    item.write(new File(dir+ "/" + filename));
                }
              }
            }
        }catch(FileUploadException e){
            e.printStackTrace();
        }catch(Exception ex) {
            ex.printStackTrace();
        }
       return true;
    }

}
JSP
<%@page import="javax.swing.ImageIcon"%>
<%@page import="java.io.File"%>
<jsp:useBean class="ni.pojos.UploadBean" id="upl" />
<jsp:setProperty name="upl" property="diretorio" value="aquivos" />
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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=UTF-8">
        <title>JSP Page</title>
    </head>
    <body><%
              
                    if (upl.doFilePost(request,application)){
                        out.println(upl.getFilename());
                        out.println(upl.getDiretorio());
                    }
       
            %>
            <form method="post" action="upload.jsp" enctype="multipart/form-data" >
              <input type="file" name="foto" />
              <input type="submit" value="Enviar" />

        </form>
 
           
    </body>
</html>

15 Respostas

D

Tua dúvida é como carregar a imagem numa JSP, é isso?

D

Na verdade, assim que eu escolher a imagem que quero fazer Upload gostaria de tipo fazer um Preview dela na mesma pagina JSP
ou assim que for chamada novamente a JSP.

D
Se você já pegou o array de bytes, faça assim:
<%@page contentType="image/jpeg" pageEncoding="UTF-8"%>
<%
    byte[] foto = (byte[]) request.getAttribute("foto");

    ServletOutputStream stream = response.getOutputStream();

    stream.write(foto);
    stream.flush();
    stream.close();

%>
Onde foto é o atributo que contem o array de bytes e que está na requisição.
D

não na verdade ainda não peguei esta array de bytes :frowning:

só fiz essas 2 partes que postei…

ja abusando um pouco da sua boa vontade, como posso pegar?

D

Já que você tá usando Commons Upload…

if (!item.isFormField()){ filename = item.getName();
Nesse trecho é só fazer item.get(); que ele já pega o array de bytes.

D

Ah sim, agora que caiu a ficha eu já peguei a array de bytes, vou testar agora a parte que postou anteriormente.

D

bom fiz assim, mas não funfou não oq fiz de errado? pois não capitei ainda :<

Classe.java

if (!item.isFormField()){
                    filename = item.getName();
                    foto = item.get();
                
                if ((filename != null) && (!filename.equals(""))){
                    filename = (new File(filename)).getName();
                    item.write(new File(dir+ "/" + filename));
                }

e na JSP assim

byte[] foto = (byte[]) request.getAttribute("foto");
                         ServletOutputStream stream = response.getOutputStream();
                                        stream.write(foto);
                                        stream.flush();
                                        stream.close();
D

Jogou o array de bytes na requisição?

D

fiz conforme o exemplo que passou, mas to com duvida essa array de bytes…
porque na verdade oque seria acho que o filename “foto” como no exemplo ela está definida com String
tanto que quando fui adicionar ao codigo item.get(); ele pede um atributo do tipo byte…
e então criei a array foto do tipo byte mas mesmo assim, ele da erro…

D

Opa,

Desculpa a demora, respondi a você quando tava na faculdade…

Então, item.get(); retorna um array de bytes (byte[]), certo?

Dê um jeito de pegar esse array de bytes e inclua na requisição (request.setAttribute(String, object)) para quando chamar a JSP que tem aquele código, ele conseguir recuperar o atributo “foto” da requisição e conseguir imprimir na tela.

Caso não consiga, mais tarde posso postar um mini-exemplo para você. =)

D

sem sucesso até agora :S

D

Desculpa a demora, quando cheguei em casa não liguei meu PC
Mas aqui está! Você só precisa importar as bibliotecas Commons IO e Commons Upload da Apache
Qualquer dúvida, pode falar

D

Oh cara, sem problemas…
Nossa funcionou direitinho…

Muito Obrigado pela ajuda e paciencia!
gratoooooo

:smiley: :smiley: :smiley:

D

Por esse exemplo dá pra tentar fazer com outros tipos de arquivo também… você só precisa saber qual tipo está vindo e na hora de exibir usar o mimetype correto. Usei esse mesmo exemplo para exibir arquivos pdf por exemplo =)

F

Cara, há como fazer isso usando recursos ajax? Tentei por várias vezes implementar o jQuery File Upload em java sem sucesso. Segue o link da demo e da documentação que não consegui fazer funcionar http://blueimp.github.com/jQuery-File-Upload/

Criado 15 de junho de 2011
Ultima resposta 13 de jun. de 2012
Respostas 15
Participantes 3