Olá tive ausente durante um tempo mais pretendo voltar a postar mais frequentemente e coisa melhores, hoje venho postar sobre como fazer download de arquivos do servidor.
Fiz uma implementação em dois sabores onde você pode baixar que é o que o código principal faz ou visualizar no browser que a tag outputlink ja faz o trabalho duro.
O código está fácil de entender e comentado por isso não vou explicar muita coisa, tem que saber um pouquinho de IO para não se perder.
Até a próxima. Download projeto no netbeans está com extensão ppt (por que wordpress não permite fazer upload de arquivo zip) mais é so renomear para zip e descompactar.
Disposição dos arquivos
———————————–
package com.wordpress.brunodanielmarinho;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
@ManagedBean
@RequestScoped
public class DonwloadFile {
public String download() {
//O primeiro parametro é o nome do arquivo que aparece para o usuario no download pode ser qualquer um.
downloadFile("teste.txt", "/teste/text.txt");
return "";
}
public String downloadFile(String nomeDoArquivoGeradoParaDownload, String caminhoRelativoComNomeEextensao) {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) context.getContext();
//Obtem o caminho para o arquivo e efetua a leitura
byte[] arquivo = readFile(new File(servletContext.getRealPath("") + caminhoRelativoComNomeEextensao));
HttpServletResponse response =(HttpServletResponse) context.getResponse();
//configura o arquivo que vai voltar para o usuario.
response.setHeader("Content-Disposition","attachment;filename=\"" + nomeDoArquivoGeradoParaDownload + "\"");
response.setContentLength(arquivo.length);
//isso faz abrir a janelinha de download
response.setContentType("application/download");
//envia o arquivo de volta
try {
OutputStream out= response.getOutputStream();
out.write(arquivo);
out.flush();
out.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
System.out.print("Erro no envio do arquivo");
e.printStackTrace();
}
return "";
}
//efetua a leitura do arquivo
public static byte[] readFile(File file) {
int len = (int) file.length();
byte[] sendBuf = new byte[len];
FileInputStream inFile = null;
try {
inFile = new FileInputStream(file);
inFile.read(sendBuf, 0, len);
} catch (FileNotFoundException e) {
System.out.print("Arquivo não encontrado");
e.printStackTrace();
} catch (IOException e) {
System.out.print("Erro na leitura do arquivo");
e.printStackTrace();
}
return sendBuf;
}
}






