Boa noite.
Quero disponibilizar o arquivo ‘WEB-INF/resources/relatorios.tar.gz’ para download, para isso usei o segundo exemplo de download dado na documentação do VRaptor, mas o caminho para o arquivo fica errado, como faço para gerar o caminho certo com referência relativa?
Atualmente, está assim:
@Resource
public class IndexController {
@Path("/")
public void index() {
}
@Path("/relatorios")
public Download relatorios() {
File source = new File("resources/relatorios.tar.gz");
System.err.println(source.getAbsolutePath());
String contentType = "application/x-zip";
String filename = "relatorios.tar.gz";
return new FileDownload(source, contentType, filename);
}
}
Alguém pode me ajudar?
Abraços,
Obrigado.
na web vc nunca pode usar arquivos relativos, pois depende mto da onde o servidor está rodando…
o ideal é vc receber o ServletContext no construtor, e fazer:
context.getRealPath("/resources/relatorios.tar.gz");
esse / é relativo à raiz web (pasta webapp por exemplo)
o ideal ainda é separar isso em um componente
Oi Lucas,
Mandei o método que faz o download para um componente e estou usando o ServletContext mas não sei o que fazer no Controller, agora o endereço do arquivo está certo mas não consigo fazer o download.
As alterações ficaram assim:
@Component
public class DownloadManager {
private ServletContext context;
public DownloadManager(ServletContext context) {
super();
this.context = context;
}
public Download downloadRelatorios() {
File rel = new File(context.getRealPath("/WEB-INF/resources/relatorios.tar.gz"));
System.err.println(source.getAbsolutePath());
String contentType = "application/x-zip";
String filename = "relatorios.tar.gz";
return new FileDownload(rel, contentType, filename);
}
}
@Resource
public class IndexController {
DownloadManager downloadManager;
public IndexController(DownloadManager downloadManager) {
super();
this.downloadManager = downloadManager;
}
@Path("/")
public void index() {
}
@Path("/relatorios")
public void relatorios() {
downloadManager.downloadRelatorios();
}
}
O que está errado?
Outra coisa, não consigo carregar o CSS das minhas páginas, isso tem alguma relação com esse problema dos caminhos?
faltou retornar o download no Controller:
@Path("/relatorios")
public Download relatorios() {
return downloadManager.downloadRelatorios();
}
Lucas Cavalcanti, desculpe a pergunta, mas como ficaria a implementação no meu JSP? estou começando a utilizar o Vraptor agora e por isso tenho tantas duvidas.
[quote=Lucas Cavalcanti]faltou retornar o download no Controller:
@Path("/relatorios")
public Download relatorios() {
return downloadManager.downloadRelatorios();
}
[/quote]
vc só precisa criar um link pra isso:
<a href="${linkTo[IndexController].relatorios}">Download</a>
quem clicar no link vai baixar o relatório.