Mostrar imagem fora do contexto do projeto

12 respostas
J

Preciso mostrar uma imagem que está fora do contexto do projeto, ou seja, está armazenado em local físico fora do projeto. Acontece que a imagem não está sendo visualizada, mesmo passando o diretório completo. Alguém sabe como fazer isso utilizando o lightbox do primefaces ou algum outro componente? Agradeço a ajuda.

<p:lightBox styleClass="imagebox"> <h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}"> <h:graphicImage value="Foto"/> </h:outputLink> </p:lightBox>

12 Respostas

L

Faz como esse exemplo do primefaces.

File file = new File("O caminho da imagem em seu computador"); InputStream inputStream = new FileInputStream(file); StreamedContent content = new DefaultStreamedContent(inputStream, "o tipo mime da imagem", "o nome da imagem"); // Ex: // StreamedContent content = new DefaultStreamedContent(inputStream, "image/jpeg", "foto-1234.jpg");

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

http://www.primefaces.org/showcase-labs/ui/dynamicImage.jsf

J

Como ficaria isso na visão(.jsf/.xhtml)?

L

Como está sua página?

J
<p:lightBox styleClass="imagebox">  
    					<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}">  
       							 <h:graphicImage value="Foto"/>  
       										  
    					</h:outputLink> 
</p:lightBox>
J

Vou tentar com o File

J

Acontece que através da visão eu passo por parâmetro o caminho da imagem, o método verifica esse caminho e retorna um StreamedContent, mas como vou retornar isso de novo para a visão?

L

Aqui é sua imagem, nomeCompletoArquivo?

<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}">
J

É o caminho físico em disco da imagem

L

Isso não resolve?

De:

<h:outputLink value="#{documento.nomeCompletoArquivo}" title="#{documento.tipoDocumento.descricao}"> <h:graphicImage value="Foto"/> </h:outputLink>
Para:

<p:graphicImage value="#{documento.binarioArquivo}" />

Onde o binarioArquivo é um StreamedContent criado com o conteúdo do arquivo.

Se o #{documento} não for um ManagedBean vc pode chamar um método que retorna o conteúdo.

<p:graphicImage value="#{documentoBean.getBinarioArquivo(documento.nomeCompletoArquivo)}" />
J

Testei dessa forma já, passei o StreamedContent através do método, mas sem resultados…acredito que é alguma coisa de diretório que a página não reconhece. porque pelo navegador acesso a imagem normalmente através do diretorio comum e um “file:///” antes. Tentei concatenar esse file:/// junto com o diretório, mesmo assim…
Acredito que será complicado encontrar uma forma de resolver isso com os arquivos estando fora do contexto do projeto.

L

Me passa o texto do #{documento.nomeCompletoArquivo}.

J

Consegui fazer usando um comandLink

public void mostrarDocumentoEmDisco(String caminho) {  
		final HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		res.setContentType("image/jpg");
		res.setHeader("Content-disposition", "inline;filename=documento.jpg");

		try {
			InputStream stream = new FileInputStream(caminho);
			res.getOutputStream().write(IOUtils.toByteArray(stream));
		} catch (IOException e) {
			e.printStackTrace();
		}
		res.getCharacterEncoding();
		FacesContext.getCurrentInstance().responseComplete();

		}

Só que dessa forma ele visualiza em outra página, isso já me serve, porém queria fazer de uma forma mais elegante, abrindo a imagem na mesma tela através de um p:dialog

Criado 14 de novembro de 2012
Ultima resposta 14 de nov. de 2012
Respostas 12
Participantes 2