No sistema que tou fazendo, pego um List e com JSTL apresento ao usuário. No final da página, tem um botão, GERAR ARQUIVO. Ao clicar vou pro ACTION, lá recupero a list com o getAttribute();
A questão é: Gostaria de gerar um arquivo .txt e que automaticamente abrisse uma caixa de download pro usuário. Como posso fazer isso?
você deve gerar o arquivo no servidor. Tenha certeza que o application server (usuário) tenha acesso de read/write no diretório que você vai criar o arquivo.
Depois você pode disponibilizar um link para o usuário clicar e fazer o download, ou então enviar um RequestDispatcher do arquivo (procure no forum que isso ja foi comentado aqui).
A
aleck
Algo do tipo:
/***Estecódigovainaaction.**/// Pasta Arquivos fica no projeto WEB, dentro do WebContent InputStreamis=getClass().getClassLoader().getResourceAsStream("/Arquivos/MeuArquivo.txt");byte[]b=inputStreamToBytes(is);ServletOutputStreamout=response.getOutputStream();response.reset();response.setHeader("Content-Disposition","attachment;filename=MeuArquivo.txt");response.setContentType("Application/xls");response.setContentLength(b.length);out.write(b);out.flush();out.close();
Aleck, você pode me explicar o que esses passos fazem ?
Obrigado, vlw pela dica
A
aleck
jrjorro:
Aleck, você pode me explicar o que esses passos fazem ?
Obrigado, vlw pela dica
//Coloca na memoria o arquivo texto, o arquivo é lido do diretório WebContent\ArquivosInputStreamis=getClass().getClassLoader().getResourceAsStream("/Arquivos/MeuArquivo.txt");// Transforma o arquivo em um array de bytesbyte[]b=inputStreamToBytes(is);// Pega o outputstream ( o caminho de comunicação entre o servidor e o navegador) ServletOutputStreamout=response.getOutputStream();// Limpa os dados do response. response.reset();// define o nome do arquivo que o usuário irá baixarresponse.setHeader("Content-Disposition","attachment;filename=MeuArquivo.txt");// define o tipo de arquivo response.setContentType("text/txt");// define o tamanho do arquivo response.setContentLength(b.length);// envia o arquivo para o usuario out.write(b);out.flush();out.close();// fecha o caminho
J
jrjorro
Alexandre,
dá o seguinte erro nessa linha:byte[] b = InputStreamToBytes(is);
dá cannot find symbol. Achei que era falta de um try - catch pra IOException, mas n! erro do mesmo jeito.try{
java.io.InputStream is = getClass().getClassLoader().getResourceAsStream("/home/moises/gerado.txt");
byte orig[] = InputStreamToBytes(is);
}catch(IOException io){
throw io;
}
Aguardo ajuda!
A
aleck
Me parece que você está programando com o bloco de notas, neste caso vc tem que fazer os imports corretos do exemplo que te passei:
getOutputStream() has already been called for this response
mas ao olhar o exemplo dos amigos aqui, consegui entender melhor e resolver…
Obrigado senhores!
X
xandevieira
dae, eu faço assim:
naactionStringarquivoTexto="sua String";quandoterminardecriarsuaStringvcpodecolocararquivoTexto.concat(".txt")porexemplothis.sendStringWithName(arquivoTexto,"nmArquivo",response);metodoqseencarregadoresto/** * Envia uma String no formato de array de bytes para o response, a fim de ser * feito o download. * @param send = arquivo que sera aberto * @param name = nome dado ao arquivo * @param response = HttpServletResponse */publicvoidsendStringWithName(Stringsend,Stringname,HttpServletResponseresponse)throwsIOException{byte[]report=send.getBytes();response.setContentType("application/save");response.setContentLength(report.length);response.setHeader("Content-Disposition","attachment; filename=\""+name+"\"");response.addHeader("Pragma","no-cache");response.setDateHeader("Expires",0);ServletOutputStreamoutputStream=response.getOutputStream();outputStream.write(report,0,report.length);outputStream.flush();outputStream.close();}
Com isso o arquivo eh gerado na memoria, nao precisando salvar e carregar um arquivo
espero tem ajudado
L
lucaslzl
Como eu faria isso mas com o java?
Estou utilizando Java com Struts para tratar as informações, e JSP apenas para as paginas.