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…
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?
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.
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: