[RESOLVIDO] Download de arquivo texto

Pessoal, tenho uma aplicação que acessa uma base de dados e gera um arquivo txt para exportar os dados.
Ao final do processo de geração eu gero o link com o nome do arquivo selecionado no início do processo.

Porém, por ser um arquivo TXT ao criar o link no browser o mesmo exibe o arquivo, ao inves de mostrar a caixa para download.

Como faço para que seja aberta a opção de download e não o arquivo na tela do navegador?
Essa dúvida acredito que seja mais para HTML do que propriamente JAVA Web, mas se alguem puder me ajudar…

Vlw.

Como está o código?

o jsp simplesmente gera um link semelhante a esse:

<a href="arquivo.txt>Download do arquivo</a>

Aí dessa forma ele exibe no browser o arquivo.

Pessoal alguém tem alguma dica?
Estive procurando na web e encontrei algo sobre o header do arquivo.

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

Só que informando isso na página, é feito o download da página que contém o link e não do conteúdo.
Exemplo:

Na página teste.jsp tenho um link para um arquivo teste.txt

Aí informando esse comando acima no jsp ele faz o download do jsp.
O que quero e fazer download do arquivo texto.

Alguém sabe uma maneira para fazer isso?

Obrigado.

ninguém sabe?

Estou evoluindo aos poucos, heheh
Consegui implementar um exemplo que encontrei.

Segue o código:

<%
                File arquivo = new File(getServletContext().getRealPath("/"), request.getParameter("arquivo"));
                if (!arquivo.exists()) {
    %>
    <script type="text/javascript"  language="javascript">
        alert('Arquivo desejado não encontrado. Verifique a geração do arquivo.');
    </script>
    <%                    } else {
                    response.setContentType("application/octet-stream");
                    // comento a linha abaixo para não forçar o download. vai abrir na própria janela.
                    response.setHeader("Content-Disposition", "attachment; filename=" + request.getParameter("arquivo"));

                    InputStream in = new FileInputStream(arquivo);
                    PrintWriter output = response.getWriter();

                    int bit = 256;

                    try {
                        while ((bit) > 0) {
                            bit = in.read();
                            output.write(bit);
                        }

                    } catch (IOException e) {
                        e.printStackTrace(System.out);
                    }

                    output.flush();
                    output.close();
                    in.close();
                }
    %>

Porém essa rotina sempre gera o caracter “?” ao final do arquivo texto, e isso gera erro na validação.
Alguém sabe me informar pq isso acontece e como corrigir?

Vlw.

Bom, consegui.

O problema do caracter “?” era devido ao fim do arquivo.

Apenas alterei esse trecho de código, onde estava:

try {  
     while ((bit) > 0) {  
           bit = in.read();  
           output.write(bit);  
}
}....

para:

try {  
     while ((bit) > 0) {  
           bit = in.read();  
           if (bit!=-1) //esse teste é feito pq ao chegar ao fim do arquivo, in.read() retorna -1.
                output.write(bit);  
}
}....

E funcionou.

Se mais alguém precisar está aí a solução que encontrei.

Até mais.

[quote=jks1903]Bom, consegui.

O problema do caracter “?” era devido ao fim do arquivo.

Apenas alterei esse trecho de código, onde estava:

try {  
     while ((bit) > 0) {  
           bit = in.read();  
           output.write(bit);  
}
}....

para:

try {  
     while ((bit) > 0) {  
           bit = in.read();  
           if (bit!=-1) //esse teste é feito pq ao chegar ao fim do arquivo, in.read() retorna -1.
                output.write(bit);  
}
}....

E funcionou.

Se mais alguém precisar está aí a solução que encontrei.

Até mais.[/quote]

Vocè podia me dizer como fica o link. eu coloco o link num jdgrid. como ficaria ele:

return "<a href='usuario/"+${usuarioLogado.funcionario.matricula}+"/"+href+"'>"+href+"</a>";

documento.txt

Não entendi com oimplementar este codigo.

Obrigado

Esse código aí fica em uma jsp.
Ele apenas recebe por parâmetro o diretorio do arquivo que deverá ser baixado.

Digamos que você crie uma página chamada download.jsp com o código acima.

Aí para fazer o download do arquivo, no link para download ao inves de você por o link direto para o arquivo você chama assim:

<a href=download.jsp?arquivo=[caminho_completo_do_arquivo]>Download do arquivo</a>

Fazendo isso ele irá exibir o arquivo pra download.

Mas o código acima é apenas para arquivos texto.

É isso aew.