Trabalhar com imagens externas no VRaptor

16 respostas Resolvido
jspfront-end
E

Eu preciso carregar uma imagem no meu .jsp e esta imagem está no diretório do meu servidor, como por exemplo F:\Imagens Eu tenho esse endereço, e o nome da imagem salvos na tabela…

Eu criei a interface Diretório:

import java.net.URI;

public interface Diretorio {

    URI salva(Arquivo arquivo);

    Arquivo recupera(URI chave);
}

E criei a classe Arquivo:

public class Arquivo {

    private String caminho;
    private String nome;

    public Arquivo(String caminho, String nome) {
        this.caminho = caminho;
        this.nome = nome;
    }

    public String getCaminho() {
        return caminho;
    }

    public void setCaminho(String caminho) {
        this.caminho = caminho;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

Como eu consigo carregar essa imagem no meu .jsp ?

16 Respostas

A

Qual servidor você utiliza?

E

Boa tarde aix!

IDE Eclipse, Hibernate, VRaptor4 e Maven

A

Boa tarde @ewertonvd, o servidor?

E

Tomcat 8.5

A

Certo, então você usar aqueles diretórios virtuais do tomcat, tem alguns posts meus da antiga que eu explicava como fazer, mas também tem na documentação do container, o legar de usar esses repositorios viruais é que vc mapeia um diretório para algum lugar físico no seu filesystem, veja:

http://respostas.guj.com.br/36049-exibir-imagem-fora-do-diretorio-da-aplicacao--jsf-e-primefaces--

esses exemplos que encontrei são com JSF mas a idéia é a mesma com Vraptor, espero que te ajude, abração.

E

Boa tarde aix!
Eu gostaria de implementar com base na documentação do VRaptor, mas não estou conseguindo…
Pois eu tenho dois campos na tabela produto, um para “localImagem” e outro para “imagem”, que possui o "nomeDaImagem.jpg "
Eu preciso passar para o .jsp como parâmentro o endereco+nome da imagem, para que ela seja carregada…
E para isso no VRaptor eu preciso criar um controller…
Até ai tudo bem:

package br.com.ebf.controller;

import java.io.File;

import br.com.caelum.vraptor.Controller;
import br.com.ebf.modelo.Produto;

@Controller
public class ImagemController {

	public File imgProduto(Produto produto) {
		return new File(produto.getLocalImagem() + produto.getImagem());
	}
}

Mas e depois… Como essa informação chega do .jsp ??

E

Pessoal não estou conseguindo progredir com esse problema…
Alguém pode me explicar a infraestrutura que eu devo criar…
Ou algum exemplo…

Obrigado!!!

A

Ola Ewertonvd,

desculpe a demora em responder mas acabei me mudando e fiquei sem net, não é permitido acessar o filesystem através do browser, ous eja: não da para montar o caminho assim, até pode, mas não é como você pensa, se fosse acesso local eu penso que dependendo do browser poderia utilizar o file:// mas não vai funcionar para a aplicação, na sua app o correto é utilizar os diretórios virtuais conforme comentei com você, ou então salva a imagem no banco, menos performático mas melhor do que ter que criar alguma bruxaria com HTML5 ou alguma velharia com Applet.

E

Bom dia aix!
Cara agora eu estou somente com o ImagemController:

Meu ImagemController, com os print´s:

package br.com.empresa.controller;

import java.io.File;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.empresa.dao.ProdutoDao;
import br.com.empresa.modelo.Produto;

@Controller
public class ImagemController {

    @Inject
    private ProdutoDao produtoDao;

    @Get("download/{id}")
    public File imgProduto(Integer id) {

        Produto produto = produtoDao.buscaProdutoPorId(id);

        String caminho = produto.getLocalImagem() + "\\" + produto.getImagem();

        /* Trocando '/' por '\\' */
        caminho = caminho.replace("\\", "\\\\");

        /* Verificando se o caminho aponta para uma imagem */
        if (!caminho.contains(".jpg")) {
            return null;
        } else {
            File arquivo = new File(caminho);
            return arquivo;
        }
    }
}

E o link para a imagem no meu .jsp, estou testando de duas formas:

<div class="col-md-2">
	<label>Imagem do produto: </label>
	<c:if test="${produto.localImagem != null && produto.imagem != null}">
	     <img src="<c:url value="/imagem/imgProduto?caminho=${arquivo.caminho}"/>"/>
	</c:if>

        <c:if test="${produto.localImagem != null && produto.imagem != null}">
                 <img src="<c:url value="/imagem/imgProduto/${produto.id}"/>"/>
  	</c:if>
</div>

Porém em ambas as tags, gera o erro no console do browser:

GET http://localhost:8080/ebf-catalogo-mysql/imagem/imgProduto/1 404 ()
atualizaVaz:567 GET http://localhost:8080/ebf-catalogo-mysql/imagem/imgProduto?caminho= 404 ()
A

vc criou o diretório virtual?

E

O problema é que eu não posso criar o arquivo nomedasuaaplicação#resenhadabolafotos.xml e gravar no diretório do usuário, porque a aplicação será acessada externamente… Não só na minha rede interna…

A

Ola @ewertonvd,

Você comentou no inicio do post que o diretório estaria no seu servidor

logo pode pode mapear, nem que seja o diretório root, crie uma estrutura ex: c:\imagens\client_one\imagem01.jpg, c:\imagens\client_two\imagem02.jpg o diretório mapeado ficaria c:\imagens com o docdir imagem, apartir dele você pode gerar várias estruturas de diretórios tanto para ler quanto para salvar, ai seu HTML vai conseguir interpretar:

E

A principio a aplicação irá ficar na minha rede sim, mas posteriormente eu irei disponibilizá-la para fora…
Implementei com base em um e-book, não deu certo…
Alterei com a ajuda dos fóruns, mas também não estou conseguindo mostrar as imagens…
Já não estou mais entendendo a estrutura…

E

A principio a aplicação irá ficar na minha rede sim, mas posteriormente eu irei disponibilizá-la para fora…
Implementei com base em um e-book, não deu certo…
Alterei com a ajuda dos fóruns, mas também não estou conseguindo mostrar as imagens…
Já não estou mais entendendo a estrutura…

A

Entendo, do modo que te proponho você teria esta feature, mas concordo com vc, tem que fundamentar a ideia, o que me ajuda quando fico na frente de dúvidas é desenhar a aplicação, os módulos se a mesma tem, a arquitetura estrutural do projeto, assim já mapeamos vários problemas que poderiam ocorrer no desenvolvimento.

E
Solucao aceita

Resolvido…

Obrigado pela ajuda aix! Um abraço!

Criado 1 de fevereiro de 2017
Ultima resposta 20 de fev. de 2017
Respostas 16
Participantes 2