Downlaod de imagem - vraptor

14 respostas
F

Olá, estou com o seguindo problemas para fazer o download da imagem.

  • quando passa o path da imagem, da o erro “Caused by: java.io.FileNotFoundException: http:/pt.siterlocal.com:8080/siter-site/images/logo-small/url_2260.png (No such file or directory)”, mas se pegar o path e colo na url a imagem abre, perfeitamente.

Alguém poderia me ajudar?

@Public @Get({"/logo/{size}/{webAddress}"})
	public Download downloadLogo(String size, String webAddress) {
		System.out.println("aki..............11111111111111");
		return getDonloadLogo(size,webAddress);
	}
	
	 public Download getDonloadLogo(String size, String webAddress) {
		 System.out.println("aki..............222222222222222");
			String logo = null;
			String image = null;
			// email
			if (webAddress.contains("@")) {
				try{
					Email email = emailDAO.getByEmail(webAddress);
					if(email.getLogo()!=null){
						logo = "images/logo-"+size+'/'+email.getLogo();
						image = email.getLogo();
					}				
				} catch (Exception e) {
					
				}
			// url
			} else {			
				try{
					Url url = urlDAO.getBy(webAddress);
					
					if(url.getLogo()!=null){
						logo = "images/logo-"+size+'/'+url.getLogo();
						image = url.getLogo();
					}
				} catch (Exception e) {
					
				}
			}

			String path = "http://" + request.getHeader("Host") + "/siter-site/"+ logo;
			System.out.println("path: "+path);
	        File file = new File(path);  
	        String contentType = "image/png";
	        String filename = image;  
	          
	        return new FileDownload(file, contentType, filename); 
		 
	 }

14 Respostas

Lucas_Cavalcanti

se é uma url com http://, vc não consegue dar new File() com ela…

vc pode tentar fazer um redirect pra essa imagem, ao invés do download:

String path = "http://" + request.getHeader("Host") + "/siter-site/"+ logo;  

result.redirectTo(path);

//sem retornar download.

ou como nesse caso vc tá dentro do mesmo servidor:

String path = "/siter-site/"+ logo;  
result.redirectTo(path);
F

Olá,

O esquema de redirectTo já tenho, mas para meu caso não esta servindo, preciso tentar a exibição da imagem pelo dowload, tem uma forma de fazer isso?

Lucas_Cavalcanti

a imagem está numa URL ou está em um arquivo no disco?

F

a imagem esta gravada em disco, onde o caminho é

logo = "/siter-site/images/logo-"+size+'/'+url.getLogo();
Lucas_Cavalcanti

isso a partir do contexto raiz?

se sim, vc tem que receber o ServletContext no construtor (ou no método) e fazer:

InputStream imagem = context.getResourceAsStream(logo);

return new InputStreamDownload(imagem, "image/png", "nomeDoLogo.png");

ou algo parecido com isso.

F

Lucas, mas uma vez muito obrigado pela ajuda.
Deu certo.

J

Lucas Cavalcanti:
isso a partir do contexto raiz?

se sim, vc tem que receber o ServletContext no construtor (ou no método) e fazer:

InputStream imagem = context.getResourceAsStream(logo);

return new InputStreamDownload(imagem, "image/png", "nomeDoLogo.png");

ou algo parecido com isso.

Estou com seguinte problema, tenho um repositorio de imagens, que guardo em um determinado diretorio especifico tipo “/home/jvds/imagens”, quero pegar a imagem carregar em memoria, depois disponibilizar ela para o meu JSP, sem precisar gerar dentro do diretorio de minha aplicação tem como fazer isto ?

Lucas_Cavalcanti

tem como fazer sim:

@Get("/imagem/{nome}") 
public File download(String nome) {
  File pasta = new File("/home/jvds/imagens");
  File imagem = new File(nome, pasta); 
  return imagem;
}
J

Lucas Cavalcanti:
tem como fazer sim:

@Get("/imagem/{nome}") public File download(String nome) { File pasta = new File("/home/jvds/imagens"); File imagem = new File(nome, pasta); return imagem; }

So para ser um pouco mais claro, no meu caso tenho um metodo editar, neste metodo quero carregar os dados da pessoa e também mostrar a foto.

//Controller
	@Get
	@Path("{id}")	
	public File editar(Integer id) {
		// TODO Auto-generated method stub
		super.result.include(super.edit(new PesPessoa(id)));
		return this.imagens.download("cetus.png");
	}

Como ficaria meu CONTROLLER e minha tag() no JSP ?

Lucas_Cavalcanti

vc não pode fazer as duas coisas ao mesmo tempo…

faça o editar redirecionar direto pra jsp correspondente, e dentro dela uma:

<img src="${linkTo[SeuController].download('foto.png')}"/><!-- vraptor 4 -->
<img src="${linkTo[SeuController].download['foto.png']}"/><!-- vraptor 3 -->
J

Lucas Cavalcanti:
vc não pode fazer as duas coisas ao mesmo tempo…

faça o editar redirecionar direto pra jsp correspondente, e dentro dela uma:

<img src="${linkTo[SeuController].download('foto.png')}"/><!-- vraptor 4 -->
<img src="${linkTo[SeuController].download['foto.png']}"/><!-- vraptor 3 -->

Ok obrigado deu certo.

Outra forma de fazer que também da ceto.

<img src="<c:url value="/imagem/download/foto.png"/>">
ou
	<img src="<c:url value="/imagem/download/${id}"/>">
hcmm

tenho um método que converte um registro Blob que vem do banco e insere em um arquivo temporário no formato pdf . Apos essa conversão é enviado para o usuário fazer download. Ele esta convertendo o arquivo corretamente, porem quando envia para download ele é renderizado com erro. Alguém saberia porque disso?

segue a foto do erro:

http://postimg.org/image/vpddqjukt/

Att…
Henrique Malveira

J

hcmm:
tenho um método que converte um registro Blob que vem do banco e insere em um arquivo temporário no formato pdf . Apos essa conversão é enviado para o usuário fazer download. Ele esta convertendo o arquivo corretamente, porem quando envia para download ele é renderizado com erro. Alguém saberia porque disso?

segue a foto do erro:

http://postimg.org/image/vpddqjukt/

Att…
Henrique Malveira

Imagino que seu método download, não esta retornando um java.io.File.

hcmm

Resolvido problema que estava fazendo a chamada via ajax. Removi e agora chama o controller direto do link

Criado 26 de setembro de 2012
Ultima resposta 23 de set. de 2014
Respostas 14
Participantes 4