[RESOLVIDO] Forçar download de arquivo vindo do banco

4 respostas
Jedi_FeniX

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.

4 Respostas

dyorgio

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…

Naruffy

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

Jedi_FeniX

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.

Jedi_FeniX

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();

Criado 24 de junho de 2009
Ultima resposta 24 de jun. de 2009
Respostas 4
Participantes 3