Forçar download

Existe alquma maneira de fazer forçar o download de uma arquivo .java ao invez de ele abrir no navegador?

Configure seu servidor web e/ou browser :slight_smile:

Tipo não entendi velho.
Pode explica melhor. Ou então não existe como fazer alguma coisa no JSP mesmo pra que o link para o arquivo .java não abre no IE mas sim execute um download?

Olá, vc pode tentar algo +/- assim:

[code]public static void download( String fileName, String content, HttpServletResponse response )
throws IOException {

    response.addHeader( "Content-Disposition",
            "attachment; filename=" + fileName );
    
    response.setContentType( "application/download" );
    ServletOutputStream outStream = response.getOutputStream();
    
    try {
        outStream.print( content );
        outStream.flush();
    } finally {
        outStream.close();
    }

}[/code]

[]'s

[quote=chicobento]Olá, vc pode tentar algo +/- assim:

[code]public static void download( String fileName, String content, HttpServletResponse response )
throws IOException {

    response.addHeader( "Content-Disposition",
            "attachment; filename=" + fileName );
    
    response.setContentType( "application/download" );
    ServletOutputStream outStream = response.getOutputStream();
    
    try {
        outStream.print( content );
        outStream.flush();
    } finally {
        outStream.close();
    }

}[/code]

[]'s[/quote]

Chico assim ate funcionou em partes. Aparte que não funcionou a a minha de adptar.
pois to chamando o metodo passando o nome do arquivo e o caminho dele mais o response ai ele abra o download com o arquivo .java contendo o conteudo do caminho que coloquei e não a classe gerada :frowning: oque estou fazendo de errado?

[quote=tiagosilveira]Chico assim ate funcionou em partes. Aparte que não funcionou a a minha de adptar.
pois to chamando o metodo passando o nome do arquivo e o caminho dele mais o response ai ele abra o download com o arquivo .java contendo o conteudo do caminho que coloquei e não a classe gerada :frowning: oque estou fazendo de errado?[/quote]
Peraê, acho que eu não entendí seu problema. O que você quer afinal ?
Que o usuário clique em um link e apareça a caixa de download de um arquivo .java, ou que o usuario clique em um link e apareça uma caixa de download do .class ?

[quote=chicobento][quote=tiagosilveira]Chico assim ate funcionou em partes. Aparte que não funcionou a a minha de adptar.
pois to chamando o metodo passando o nome do arquivo e o caminho dele mais o response ai ele abra o download com o arquivo .java contendo o conteudo do caminho que coloquei e não a classe gerada :frowning: oque estou fazendo de errado?[/quote]
Peraê, acho que eu não entendí seu problema. O que você quer afinal ?
Que o usuário clique em um link e apareça a caixa de download de um arquivo .java, ou que o usuario clique em um link e apareça uma caixa de download do .class ?

[/quote]

Do .Java mas e que eu gero ele em com
File diretoriodoArquivo = new File(lugardoArquivo);
writer = new FileWriter(new File(diretoriodoArquivo, nomeEntity+".java"),true);
PrintWriter resultado = new PrintWriter(writer);

Ai preencho ele com resultado.println
e ai depois de dar resultado.close() e writer.close() queria q fosse feito o download dele.
Mas por esse metodo que vc me passou não consegui mandar o .java criado mas sim criar uma na horar com o conteudo da String content.
Entendeu?

Faça assim:
Crie uma classe com esses métodos (FileUtil por exemplo) e chame o seguinte metodo passando um File com o arquivo, e o response:

[code]// Passe para esse método um File com o arquivo desejado.
public static void download( File file, HttpServletResponse response )
throws IOException {

                   FileUtil.download( file.getName(), read( file ), response );
}[/code]

[code]public static byte[] read( File file ) throws IOException {

	byte[] content = null;
	int fileLength = (int) file.length();
	FileInputStream fileInput = null;

	try {
		fileInput = new FileInputStream(file);

		BufferedInputStream bufferedInput = new BufferedInputStream(
													fileInput);
		content = new byte[fileLength];
		bufferedInput.read(content, 0, fileLength);
		bufferedInput.close();
	} finally {
		if (fileInput != null) {
			fileInput.close();
		}
	}

	return content;
}[/code]

[code]public static void download( String filename, byte[] content,
HttpServletResponse response ) throws IOException {

	response.addHeader( "Content-Disposition",
				"attachment; filename=" + filename );
	response.setContentType( "application/octet-stream" );
	
	ServletOutputStream outStream = response.getOutputStream();
	
	// envia o conteúdo do arquivo para o stream de resposta
	try {
		outStream.write( content );
		outStream.flush();
	} finally {
		outStream.close();		
	}
}[/code]

[]'s

Vlw Chico funcionou

[quote=chicobento]Olá, vc pode tentar algo +/- assim:

[code]public static void download( String fileName, String content, HttpServletResponse response )
throws IOException {

    response.addHeader( "Content-Disposition",
            "attachment; filename=" + fileName );
    
    response.setContentType( "application/download" );
    ServletOutputStream outStream = response.getOutputStream();
    
    try {
        outStream.print( content );
        outStream.flush();
    } finally {
        outStream.close();
    }

}[/code]

[]'s[/quote]

Estou resgatando esse topico pois estou fazendo a implementacao de um simples download de arquivo na minha aplicacao. Esse topico apareceu no resultado da busca.

Minha duvida eh: o que seria esse argumento ‘content’ do tipo String passado para o metodo download?

Valeu 8)

sei q o post é antigo, mas o “content” em questão é o conteúdo a ser baixado… :wink:

Pessoal, achei bem legal as classes, mas tem algum exemplo de como usar???