Boa tarde galera d GUJ
Bom, eu tenho uma aplicação rodando e em determinado momento o usuario gera um arquivo .zip e ele precisa baixar esse arquivo, a minha pergunta é:
Como eu faço pra ele gerar o arwuivo e enviar o mesmo na resposta para o usuario?
Sei que tenho que usar o HttpServletRequest e ttpServletResponse, porem não sei como usalos, alguem poderia me dar uma luz?
Meu codigo esta assim:
public void criaArquivoZip() throws ZipException, IOException{
try {
File file= new File("C:/Users/Apanhamentos/Documents/workspace/Administracao/"+nomeZip);
ziper.criarZip(file, list);
//aqui ele deveria enviar o arquivo para o usuario...
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
cara,
segue um exemplo em JSF
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
OutputStream os = null;
try {
os = response.getOutputStream();
response.setContentType("application/zip");
response.setContentLength(ARQUIVO.length);
response.setHeader("Content-disposition","attachment; filename=\"arquivo.zip\"");
os.write(ARQUIVO);//pegar seu arquivo zip gerado e converte-lo em byte[]
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(os != null){
os.flush();
os.close();
}
facesContext.responseComplete();
} catch (IOException e) {
e.printStackTrace();
}
}
t+
Puts valeu cara funciona que é uma beleza, o codigo pra que quiser ver fico assim:
public void criaArquivoZip() throws ZipException, IOException{
try {
File fileGerado= new File(caminho+nomeZip);
ziper.criarZip(fileGerado, list);
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
OutputStream os = null;
System.out.println();
byte[] arquivoGerado= recuperaFileEmByte(fileGerado);
try {
os = response.getOutputStream();
response.setContentType("application/zip");
response.setContentLength(arquivoGerado.length);
response.setHeader("Content-disposition","attachment; filename=\"arquivo.zip\"");
os.write(arquivoGerado); //pegar seu arquivo zip gerado e converte-lo em byte[]
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(os != null){
os.flush();
os.close();
}
facesContext.responseComplete();
} catch (IOException e) {
e.printStackTrace();
}
}
nomeZip="";
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private byte[] recuperaFileEmByte(File inFile) {
InputStream is = null;
byte[] buffer = null;
System.out.println(inFile.getAbsolutePath());
try {
is = new FileInputStream(inFile);
buffer = new byte[is.available()];
is.read(buffer);
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
Vlww
cara,
so mais uma dica, vc nem precisa salvar o arquivo fisicamente, vc pode criar seu arquivo zip e pegar o byte[].
t+