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
This entry was posted in Java, Jsf and tagged , , . Bookmark the permalink.

One Response to Download de arquivo com Java

  1. Aprendi muito

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>