[RESOLVIDO]Upload de Imagens dando erro no Webapp

Prezados, boa noite.

Tudo bem ?

Preciso de uma ajuda, em relação a “inserção” de imagens no servidor Glassfish e recuperação com o mesmo.

Bem estou utilizando JSF 2.2 + Primefaces. No entanto, ao tentar inserir as imagens no mesmo contexto ou no meu projeto Webapp eu não consigo obter fotos/retornar para a minha página de login ou da error 404. Mas se eu colocar em um caminho/path “externo” ele faz o upload.

Embora, eu consiga fazer o upload eu não consigo ter o retorna das imagens senão pelo WebApp.

Segue uma imagem de como fica:

1
@Mike meu amigo, boa tarde.

Tudo bem ?

Sobre a aplicação na qual eu havia lhe mostrado, antes.

Preciso de uma ajuda sua em relação a inserção de imagens no servidor Glassfish e recuperação com o mesmo.

Bem estou utilizando JSF 2.2 + Primefaces. No entanto, ao tentar inserir as imagens no mesmo contexto ou no meu projeto Webapp eu não consigo algumas fotos/retornar para a minha página de login ou da error 404. Mas se eu colocar em um caminho/path “externo” ele faz o upload.

Embora, eu consiga fazer o upload eu não consigo ter o retorna das imagens senão pelo WebApp.

Segue uma imagem de como fica:

Desde já prezo por uma grande ajuda !

Estou utilizando glassfish !

No entanto, deixando na pasta Webapp do projeto. Tenho o seguinte erro:

Ou seja as imagens não são enviadas nem para o Projeto!

Código de upload:

/**
 * @param e
 * @throws java.io.IOException
 * @IOException
 *
 */
public void enviarImagem(FileUploadEvent e) throws IOException {

    listaUploadfoto.add(e);

    InputStream in = new ByteArrayInputStream(e.getFile().getContents());

    BufferedImage bImageFromConvert = ImageIO.read(in);

    //cria arquivos na pasta espefica
    ImageIO.write(bImageFromConvert, "PNG",
            new File("C:\\Users\\Jandisson\\Documents\\NetBeansProjects\\template-admin-faces-master\\fotografias\\src\\main\\webapp\\imagensfotografias\\" + e.getFile().getFileName()));

    FacesContext fc = FacesContext.getCurrentInstance();
    fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "FEITO UPLOAD DA FOTO: " + e.getFile().getFileName(), "")); }

Obtenção das imagens:

//metodo responsavel por visualizar as fotos pertencentes ao Evento determinado
public Set<String> getImagens() {

    Set<GaleriaTransfer> listarTodosEventoss = new HashSet<GaleriaTransfer>();
    Set<String> images = new HashSet<String>();
    try {
        //tentar identificar o  valor do evento
        listarTodosEventoss = cadastrarEventoBO.listarEventoGaleria(galeriaTransfer.getNomeevento());
        String caminho = "C:\\Users\\Jandisson\\Documents\\NetBeansProjects\\template-admin-faces-master\\fotografias\\src\\main\\webapp\\imagensfotografias\\";
        File file = new File(caminho);

        //caminho da pasta existente
        String path = (file.getAbsolutePath());

        for (GaleriaTransfer f : listarTodosEventoss) {
            FileOutputStream fos = new FileOutputStream(path + "\\" + f.getDescricaofotosgaleria());
            fos.write(f.getFotosgaleria());
            fos.close();
            images.add(f.getDescricaofotosgaleria());

            //paginas.valorRedirect("consultarevento.xhtml");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return images;}

Bom dia @Bsi,

Uma vez eu estava com o mesmo problema (acredito eu), eu estava utilizando o componente photoCam do PrimeFaces e eu queria salvar a foto na pasta resources/image do projeto, só que quando eu ia recuperar a foto não dava certo, pq quando o servidor/projeto subiu, ele subiu sem a imagem estar ali

Para visualizar uma imagem que esteja num caminho externo, você tem que utilizar o graphicImage do PrimeFaces, pois o do JSF só enxerga no contexto do projeto.

Para colocar uma imagem externa no p:graphicImage, você deve ter um objeto StreamedContent e então passar o caminho da imagem para o StreamedContent. No graphicImage você passa o StreamedContent no atributo value

StreamedContent meuStreamedContent;
...
streamedContent = new DefaultStreamedContent(new FileInputStream("caminho"));
<p:graphicImage value="{meuBean.meuStreamedContent}" />
1 curtida

@Mike, bom dia.

Então eu to utilizando o primefaces com <p:galleria/>

Ta assim:

<p:galleria value="#{imagensfotografias.imagens}" 
                           var="image" 
                           style="width:100%"  
                           showCaption="true">
    <p:graphicImage name="/imagensfotografias/#{image}" 
                                            alt="#{image}" 
                                            title="#{image}"/>
<p:galleria/>

*Irei passar o caminho do StreamedContent e tentar recuperar na minha lista!

Será que funciona ?

Abraço !

Eu acredito que sim, mas deve dar um trabalhozinho

1 curtida

Isso

Teria que ser

<p:graphicImage value="{meuBean.meuStreamedContent}" />

EDIT:
O value do graphicImage vai chamar o getMeuStreamedContent(), ai lá no método você passa o valor atual de #image no FileInputStream e então deve dar certo

1 curtida

É com necessidade. Então irei correr e verificar o quanto, antes !

Assim que eu tiver algo em mãos eu irei colocando, aqui.

Meu caro.

Eu irei tentar deste jeito:

E de outros, tb. Grande abraço e até nestante !

@Mike! Embora eu tenha feito o teste. O mesmo só me retornou uma imagem. Agora to analisando com uma lista de imagens !

Qualquer coisa vai postando o código

Bom dia. Mal pela demora, @Mike .

Então:

 public List<GaleriaTransfer> getListafotos() {
        List<GaleriaTransfer> galeriaTransfers = new ArrayList<GaleriaTransfer>();

        ///String caminho = "D:\\IMAGENSPROJETO\\";
        //File file = new File(caminho);

        //caminho da pasta existente
        //String path = (file.getAbsolutePath());
        imagens = cadastrarEventoBO.listarEventoGaleria(galeriaTransfer.getNomeevento());
        for (GaleriaTransfer image : imagens) {
            //galeriaTransfer = new GaleriaTransfer();
            InputStream inputStream = new ByteArrayInputStream(image.getFotosgaleria());
            galeriaTransfer.setContent(new DefaultStreamedContent(inputStream, "image/png"));

            //inputStream = new FileInputStream(path + "\\" + image.getDescricaofotosgaleria());
            //galeriaTransfer.setContent(new DefaultStreamedContent(inputStream, "image/png"));
            galeriaTransfers.add(galeriaTransfer);

        }
        return galeriaTransfers;
    }

Mesmo assim só mostra as imagens em vazio!

 <div class="ui-g-12">
                        <div class="ui-g-12">
                            <p:galleria value="#{cadastrarEventoMB.listafotos}" 
                                        var="galeria" 
                                        style="width: 100%"
                                        >
                                <p:graphicImage value="#{galeria.content}"   <----É DO TIPO: StreamedContent
                                                />                                            
                            </p:galleria> 
                        </div>
                    </div>

galeria vazia!
Retorna a quantidade de fotos certinha. Mas fica vazia!

Assim ele só me retorna uma imagem:

public StreamedContent getImage() {

        //todo maybe need to load from db
        imagens = cadastrarEventoBO.listarEventoGaleria(galeriaTransfer.getNomeevento());
        for (GaleriaTransfer image : imagens) {
            if (image.getFotosgaleria() != null) {
                return new DefaultStreamedContent(new ByteArrayInputStream(image.getFotosgaleria()));
            }
            return null;
        }
        return null;
    }

To verificando para outro tipo de retorna no meu DAO para o StreamContent. E tentar fazer uma lista de imagens.

Eu fiz um teste aqui e estou com o mesmo problema que você, mas caso eu passe um nome fixo funciona de boa

Nome dinamico (não funciona)

<p:galleria var="imagem" value="#{testeBean.list}" >
				<p:graphicImage value="#{testeBean.getStreamedContent(imagem)}" ></p:graphicImage>
			</p:galleria>

Nome fixo (funciona)

<p:galleria var="imagem" value="#{testeBean.list}" >
				<p:graphicImage value="#{testeBean.getStreamedContent('imagem1.png')}" ></p:graphicImage>
			</p:galleria>

Mais tarde vou tentar de novo para ver o que esta acontecendo

Depois eu posto o meu bean

Com um dado ele retorna, meu amigo !

To tentando buscar alguma solução. Pois de quaisquer tenho que deixar com a melhor legibilidade, para uma futura alteração.

Desde já, muito obrigado, meu amigo!

Analisando…

Analisando…

@Mike, boa tarde.

Conseguir só retornar a mesma imagem várias vezes. Senão um única, vez. Ainda to pesquisando e tentando encontrar algum ponto neste túnel.