Dowload de Arquivo

Ola rapaziada do guj!

Bem , semana passada eu postei um tópico sobre upload de arquivos, consegui baixar um componente que faz esse trabalho e armazena no banco de dados, tudo bacana hehehe.
o problema é como posso fazer para recuperar esses arquivos,listar e para cada nome que apareça na lista tenha um link para baixar o arquivo (o arquivo esta em um campo blob).
Tentei fazer isso criando uma classe arquivo que tinha como atributos: id, nome e arquivo (esse eh do tipo blob), consequi listar todos os arquivos no banco com seus respectivos nomes, porém se eu passo um link para o campo blob desse arquivo ele não baixa o arquivo (lógico). Espero que tenham me entendido, isso deve ser besteira mas gostaria de uma ajuda se possível.
Será que o campo da classe arquivo deve ser blob?

Você viu o componente download4j (http://www.javazoom.net/jzservlets/download4j/download4j.html), no meu caso eu escrevi minha própria servlet que faz um getBinaryStream (do ResultSet) e escreve no browser do usuário.

hklemp blz …

Tem jeito de vc me arrumar um exemplo desse componente de uplodad ?

:shock:

Falow …

Cara tai o link , esse componente eh muito bom eu uso com mysql sem problemas
http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html

Tem uma forma melhor de fazer isso, sem componetes pelo menos no caso de campos blob.

Estou desenvolvendo uma aplicação que grava e recupera imagens do banco Oracle. Para exibir a imagem você precisa de um servlet, action (struts) ou jsp que:

  • abra uma conexão com o banco
  • faça um select na imagem
  • peque um stream da imagem
  • sete o content do response como image/jpeg
  • e retorne os bytes do stream
    Na pagina jsp que vai exibir a imagem o segredo é chamar o servlet, action ou pagina jsp que retorna o conteúdo da imagem no campo src da tag html img: , passando o id da foto que será buscada no banco como parâmetro.
    Segue um exemplo:

/** getphoto.jsp codigo fonte /
<%@page import="java.sql.
,oracle.jdbc.*"%>
<html>
<head>
<title>jsp1</title>
</head>

<table width="781" border="2"> <tr> <td width="83" bgcolor="#C0C0C0"> PhotoId </td> <td width="450" bgcolor="#C0C0C0"> Description </td> <td width="228" bgcolor="#C0C0C0"> Photo Image </td> </tr> <% Connection conn = null; Statement stmt = null; ResultSet rset = null; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection("jdbc:oracle:thin:@itas:1521:oraITAS","yourDbUserId","yourDbPassword"); stmt = conn.createStatement(); rset = stmt.executeQuery("select photo_id,photo_description from photo"); while (rset.next()) { %> <tr> <td width="83"> <%=rset.getObject("photo_id")%> </td> <td width="450"> <%=rset.getObject("photo_description")%> </td> <td width="228"> <img src="getimage.jsp?PhotoId=<%=rset.getObject("photo_id")%>" width="238" height="228"> </td> </tr> <% } conn.close(); %> </table> </html>

/** getimage.jsp codigo fonte*/

<%@ page contentType=“image/jpeg; chaoResult=iso-8859-1”
language=“java” import=“java.sql.,java.io.,java.util.*”
errorPage="" %>
<%
String strConnString = null;
Connection oDbConn;
Statement oStmt;
ResultSet oResult;
String strConnection = null;
String strUserId = “c_erober”;
String strUserPwd = “sybdev99”;
String strDatabase = “oraITAS”;
String strPhotoId;
strConnString = “jdbc:odbc:” + strDatabase;
String strSql;
try {
strPhotoId = (String) request.getParameter(“PhotoId”);
strSql = “select photo_image from photo” + ( (strPhotoId==null) ? " where photo_id = ‘001’": (" where photo_id = ‘" + strPhotoId + "’") );

DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
oDbConn = DriverManager.getConnection(strConnString,strUserId,strUserPwd);
response.setContentType(“image/jpeg”);
oStmt = oDbConn.createStatement();

oResult = oStmt.executeQuery(strSql);
oResult.next();

byte[] bytearray = new byte[4096];
int size=0;
InputStream sImage;
sImage = oResult.getBinaryStream(1);
response.reset();
response.setContentType(“image/jpeg”);
response.addHeader(“Content-Disposition”,“filename=getimage.jpeg”);
while((size=sImage.read(bytearray))!= -1 ) {
response.getOutputStream().write(bytearray,0,size);
}
response.flushBuffer();
sImage.close();
oDbConn.close();
} catch (SQLException ex) { ex.getMessage();
}
%>

O código acima é bem didático, mas aconselho usar servlets e não páginas jsp para abrir a conexão, fazer consulta ao banco e returnar a imagem.
Espero ter ajudado.