Pessoal,
estou com um problema sério!
Fiz uma aplicação que tem o objetivo principal de fazer uploads e downloads de documentos.
Testei tudo em casa e até aí tudo blz… o problema foi quando eu implantei o sistema.
Acontece que quando o cliente clica para fazer o download do arquivo, este é gravado em um diretório no servidor e não na máquina do usuário.
Em casa eu não peguei esse erro porque estava tudo em uma máquina só. Meu problema é como fazer o download do arquivo, uma vez que esse arquivo está no banco de dados?
Alguem tem uma sugestão?
Obrigado
Crie um servlet com o seguinte trecho:
Conexao cnct = new Conexao();
try {
cnct.conecta();
PreparedStatement sql=cnct.conn.prepareStatement("SELECT arquivo,nome_arquivo FROM tbl_anexo where id_anexo="+request.getParameter("id_anexo"));
ResultSet rs = sql.executeQuery();
if (rs.next()) {
Blob blob = rs.getBlob(1);
byte[] blobData = blob.getBytes(1, (int)blob.length());
String nome = rs.getString(2).replaceAll(" ", "_");
String caminho = (getServletContext().getRealPath("/anexos/") + nome);
//Now you got your data in blobData... write to file
java.io.FileOutputStream fileOut = new java.io.FileOutputStream(caminho);
fileOut.write(blobData);
//System.out.println(caminho);
// aqui deve ser configurado direito, baseado no tipo do arquivo
response.setContentType("application/download");
//response.setContentType("multipart/form-data");
// mude "attachment" para "inline" para mostrar direto no browser
String arq = "attachment;filename="+ nome;
response.setHeader("Content-Disposition", arq);
//response.setHeader( "Content-Disposition", "inline;filename="+nome+"");
ServletOutputStream os = response.getOutputStream();
os.write( blobData );
os.close();
cnct.conn.close();
java.io.File file = new java.io.File(caminho);
file.delete();
}
}finally {
try{cnct.conn.close();}
catch(Exception e){e.printStackTrace();}
}
Obrigado Marcelo
Já consegui resolver o problema. Foi exatamente da forma que vc descreveu, mas eu não criei um servlet pra isso. Mas já está funcionando
Obrigado novamente