No código abaixo, o que acontece é o seguinte:
response.setContentType("application/octet-stream");
response.setContentLength((int) certificado.length());
response.setHeader("Content-Disposition","attachment; filename=\"Certificado.cer\"");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(certificado));
ServletOutputStream sos = response.getOutputStream();
byte[] buf = new byte[1024];
int count = 0;
while ((count = bis.read(buf)) >= 0) {
sos.write(buf, 0, count);
}
bis.close();
sos.flush();
sos.close();
Este código está no meu servlet. Ao executar o flush() é aberta uma caixa de diálogo mostrando a opção para o usuário fazer o dowload. Aqui surgem duas dúvidas:
-
Como faço para que, após o usuário fazer o download do arquivo, eu redirecione-o para outra página (para efetuar uma cobrança, por exemplo). Já tentei
response.sendRedirect(“caminho”)e RequestDispatcher (instanciando um objeto e dando um “forward”) mas, em ambos os casos, me foram lançadas Exceções do tipo IlegalStateException ou “Cannot redirect response alredy commited” (ou algo assim). Procurei em vários lugares mas não encontrei uma solução. -
Para o mesmo caso, quando a janela de download é aberta, o usuário tem 2 opções: Fazer o download ou não. Em caso negativo, como consigo saber se o usuário cancelou ou não a ação?? Preciso saber disso para não salvar nada no BD.
Obrigado pela ajuda.
Michel