Forçar download

11 respostas
tiagosilveira

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

11 Respostas

cv1

Configure seu servidor web e/ou browser :slight_smile:

tiagosilveira

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?

C

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

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();
        }

    }

[]'s

tiagosilveira
chicobento:
Olá, vc pode tentar algo +/- assim:
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();
        }

    }

[]'s

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 :( oque estou fazendo de errado?

C

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?

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 ?

tiagosilveira

chicobento:
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?

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 ?

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?

C

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:

// 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 );
	}
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;
	}
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();		
		}
	}

[]'s

tiagosilveira

Vlw Chico funcionou

felipe_gdr
chicobento:
Olá, vc pode tentar algo +/- assim:
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();
        }

    }

[]'s

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)

R

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

B

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

Criado 13 de abril de 2005
Ultima resposta 4 de nov. de 2008
Respostas 11
Participantes 6