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

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

[code]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;
}

}[/code]

JSP

[code]<%@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”%>

JSP Page <%
                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>
[/code]

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

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.

Se você já pegou o array de bytes, faça assim:

[code]
<%@page contentType=“image/jpeg” pageEncoding=“UTF-8”%>
<%
byte[] foto = (byte[]) request.getAttribute(“foto”);

ServletOutputStream stream = response.getOutputStream();

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

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

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?

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.

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

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

Classe.java

[code] 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));
            }[/code]

e na JSP assim

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

Jogou o array de bytes na requisição?

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…

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ê. =)

sem sucesso até agora :S

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

Oh cara, sem problemas…
Nossa funcionou direitinho…

Muito Obrigado pela ajuda e paciencia!
gratoooooo

:smiley: :smiley: :smiley:

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 =)

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/