Download de arquivo com Java

Se você gostaria que quando o usuário clicasse num link ao invés de ser exibido uma imagem (ou qualquer outro arquivo) fosse apresentado para ele a telinha de download você está no lugar certo.

Para que isso ocorra você terá que forçar para que o navegador mostre a tela de download, se for apenas redirecionado para o caminho do arquivo e este for uma imagem por exemplo o navegador irá tentar exibir a imagem.
Primeiro você vai precisar obter o objeto HttpServletResponse (neste caso foi usado para JSF)

HttpServletResponse response = (HttpServletResponse)
FacesContext.getCurrentInstance().getExternalContext().getResponse();

Após esse passo deve ser setado o nome do aquivo para download

response.setHeader("Content-Disposition",
"attachment;filename=\"" + nomeDoArquivo + "\"");

E agora a “mágica”, o que vai forçar o navegador mostrar a tela de download, mesmo que ele seja capaz e exibir o tal arquivo

response.setContentType("application/download");

Você ainda poderá definir outras informações como o charset, ou o tamanho do aquivo

response.setCharacterEncoding("ISO-8859-1");
response.setContentLength(arquivo.length);

Pra terminar pegue a saída padrão, escreva o arquivo e finalize

OutputStream out;
out = response.getOutputStream();
out.write(arquivo);
out.flush();
out.close();
FacesContext.getCurrentInstance().responseComplete();

Segue o código completo:

	public static void downloadFile(String nomeDoArquivo, byte[] arquivo) {

		ExternalContext context =
		FacesContext.getCurrentInstance().getExternalContext(); 

		HttpServletResponse response =
		(HttpServletResponse) context.getResponse();
		// aki eu seto o nome q vai aparecer na hr do donwload
		response.setHeader("Content-Disposition",
		"attachment;filename=\"" + nomeDoArquivo + "\"");
		// O tamanho do arquivo
		response.setContentLength(arquivo.length);
		// forçando o download
		response.setContentType("application/download");

		try {

			OutputStream out;
			out = response.getOutputStream();
			out.write(arquivo);
			out.flush();
			out.close();
			FacesContext.getCurrentInstance().responseComplete();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

É isso ai galera, espero que seja de bom proveito.
Fiquem com Deus e aquele abraço.
Download de arquivo com Java

Blog Widget by LinkWithin
 

One Response to “Download de arquivo com Java”

  1. 6:51 pm on setembro 1 2009, Jennifer-Tool said:

    Aprendi muito

Leave a Reply