Dowload de Arquivo

4 respostas
H

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?

4 Respostas

douglasfs

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.

anjomal

hklemp blz …

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

:shock:

Falow …

H

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

Camilo_Sales

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 <em>/

<%<a class="mention" href="/u/page">@page</a> import="java.sql.</em>,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.<em>,<a href="http://java.io">java.io</a>.</em>,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.

Criado 21 de maio de 2003
Ultima resposta 15 de dez. de 2003
Respostas 4
Participantes 4