Como posso forçar o download de um arquivo vindo do banco de dados.
Por exemplo teria uma servlet que faria a consulta no banco de dados, montaria o arquivo dinâmicamente e disponibilizaria o arquivo para download.
[RESOLVIDO] Forçar download de arquivo vindo do banco
4 Respostas
do sua coluna BLOB do banco
direto pro filesystem do servidor,
seu link para download ficaria apontada para esse arquivo recem criado.
para evitar fazer esse procedimento muitas vezes (usar muito o HD para gravar)
implemente um cache, assim mesmo 1000 usuarios baixando o mesmo arquivo, vc
só vai tirar ele do banco 1 vez…ai se ninguem baixa ele, faz 1 semana, vc deleta…
e o proximo que vier baixar vc faz tudo denovo…
Chame seu servlet por ajax
Ai no servlet após fazer a consulta do arquivo faça o seguinte
byte[] conteudoArquivo = new byte[1000];
int size = 0;
String nameFile = resultSet.getString("Nome_Arquvio");
inputStream = resultSet.getBinaryStream("Arquivo");
response.setHeader("Content-Disposition", "attachment;filename=" + nameFile);
while ((size = inputStream.read(conteudoArquivo)) != -1) {
response.getOutputStream().write(conteudoArquivo, 0, size);
}
response.flushBuffer();
inputStream.close();
Ao terminar a requisição ajax a janela de donwload irá aparecer automaticamente
Baseado no seu código Naruffy cheguei a este:
GameJpaController dao = new GameJpaController();
Game game = dao.findGame(Integer.parseInt(request.getParameter("game")));
response.setHeader("Content-Disposition", "attachment;filename=" + game.getName().replace(" ", "_") + ".jar");
response.setContentLength(game.getFile().length);
response.setContentType("application/jar");
response.getOutputStream().write(game.getFile());
response.getOutputStream().flush();
response.getOutputStream().close();
response.flushBuffer();
Sendo que quando faço o download do arquivo, o mesmo chega com 0Kb.
Achei a solução, abaixo vai o código certo:
GameJpaController dao = new GameJpaController();
Game game = dao.findGame(Integer.parseInt(request.getParameter("game")));
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"" + game.getName().replace(" ", "_") + ".jar\"");
response.setContentLength(game.getFile().length);
response.setContentType("application/jar");
ServletOutputStream output = response.getOutputStream();
output.write(game.getFile(), 0, game.getFile().length);
output.flush();
output.close();
response.flushBuffer();