Armazenar imagem em mysql

Olá, estou fazendo um sisteminha em JSP com struts e eclipse, e tenho q armazenar e carregar imagens no banco, como isso é possível? Já ouvi falar d blob, maas nem sei o q é!!
Obrigado

Oi

Amigao, de uma olhada no link abaixo, ensina como fazer uload de imagens pra o MySQL

http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=83

T+

Testei o código desse arquivo, mais não funcionou…fiz algumas alterações e está funcionando, também estou tendo que implementar um sistema que faz upload e guarda a imagem no BD, também terei que mostrar a imagem guardada no banco…Já que estamos “trabalhando” na mesma coisa podemos trocar algumas informações. Qauqluer coisa me manda um e-mail.

Estou com um problema parecido, mas em vez de fazer a chamada DB usando um MySQL, eu preciso de entregar o blob pronto para camada de persistência gravar o arquivo.

Ou seja, eu não vou usar o blob apenas para ler do banco, mas sim para inserir também!

A questão é: Como transformar o binário do arquivo para o blob? Ainda não testei nada, por estou sem conhecimento nenhum tanto sobre manipulação binária de arquivo quanto o blob!

[quote=“francisbh”]
A questão é: Como transformar o binário do arquivo para o blob? Ainda não testei nada, por estou sem conhecimento nenhum tanto sobre manipulação binária de arquivo quanto o blob![/quote]

Evite usar objetos BLOB na sua aplicação, pois raramente são implementados pelos drivers, e quando o são têm muitos problemas que não permitem uma utilização transparente destes objetos… para armazenar o dado binario utilize byte[] para guardá-lo num objeto e depois, quando for passá-lo para o PreparedStatement use do seguinte modo:

byte[] data = instanciaVO.getBlobData(); PreparedStatement pstmt = connection.prepareStatement("insert into blabla values(...)"); pstmt.setBinaryStream(1,new ByteArrayInputStream(data),data.length); pstmt.executeUpdate();
Não é necessário manter referencia para o ByteArrayInputStream pois o método close() não tem efeito algum no stream de dados.
Lembre-se vc está trabalhando com bytes e não com o que eles representam; seja uma imagem ou um arquivo zipado, eles não passam de meras sequencias de bytes para a camada de persistencia/dados.

Interessante viecili, este esquema de não ter um tipo só, podendo ser tanto como imagem como um zip. Pode dar masi explicações, ou até um aplicativo pequeno q vc tenha, fazendo o upload e mostrando depois só para vermos.
Desde já, agradeço
Abraço pessoal

viecili,
não tenho esta opção de não usar o Blob no meu projeto. Estou trabalhando com persistência do OJB
http://db.apache.org/ojb/
Problema que todos os exemplos que encontrei usando Blob até agora são utilizado para buscar algo. Eu preciso do sentido contrário primeiro! Preciso colocar algo no banco, pra depois buscar!

[quote=“guaraviton”]Interessante viecili, este esquema de não ter um tipo só, podendo ser tanto como imagem como um zip. Pode dar masi explicações, ou até um aplicativo pequeno q vc tenha, fazendo o upload e mostrando depois só para vermos.
Desde já, agradeço
Abraço pessoal[/quote]

Bom vamos lá (não é muito simples - grande abstração), digamos que vc quer disponibilizar ao teu usuário uma pasta de arquivos onde ele pode fazer upload e download de qualquer arquivo, entretanto vc deseja armazenar os arquivos em uma base de dados ao invés de uma filesystem.
Primeiro vc cria uma página com um campo <input type=‘file’ /> para poder fazer o upload deste arquivo. É possível fazer isso com o pacote commons-fileupload do Jakarta Commons.
A partir daí vc vai ter o conteúdo do arquivo (byte[]) e o nome do arquivo (incluindo a extensão). Então vc salva este arquivo numa base de dados de modo que vc consiga recuperá-lo de algum modo.
Porém vc ainda tem que disponibilizar o download deste arquivo, para isso faça um servlet que recebe parametros que possam localizar tal arquivo na base de dados e fazer com que o servlet escreva o conteudo do arquivo diretamente na resposta da requisição. Antes de retornar o arquivo vc deve setar o ContentType da resposta, para isso vc pode usar as classes do pacote activation e pegar o mime-type com base na extensão do arquivo.

Exemplo de uso: o usuário faz o upload de uma imagem e deseja utilizá-la em uma tag <img/>, então basta ele colocar na página o seguinte:&lt;img src=&quot;http&#58;//www.mysite.com/servlet/DownloadArquivo?user=joao&amp;codArq=0001&quot; /&gt;

Espero ter ajudado, caso tenha confundido, podem perguntar o que ficou em dúvida, mas de modo objetivo… ehheehe




**
*

[quote=“francisbh”]viecili,
não tenho esta opção de não usar o Blob no meu projeto. Estou trabalhando com persistência do OJB
http://db.apache.org/ojb/
Problema que todos os exemplos que encontrei usando Blob até agora são utilizado para buscar algo. Eu preciso do sentido contrário primeiro! Preciso colocar algo no banco, pra depois buscar![/quote]

Não sei como funciona o mapeamento do OJB, mas trabalhar com objetos BLOB não é fácil. Por exemplo, no ORACLE quando vc quer gravar alguma coisa usando BLOB, é necessário abrir um Stream direto de dados com o banco e ir salvando de pouco em pouco, é muito chato, cheio de controle de exceções etc… No DB2 da IBM eu acho que o BLOB e o CLOB nem são implementados pelo driver… é como eu disse, as implementações ficam bastante dependentes do fabricante do BD…

No seu caso, o melhor conselho é entrar na lista de discussão do OJB e perguntar como é que vc pode fazer isso!

Cara, vc não vai acreditar! Resolvi o problema de outra maneira bem mais simples. Pesquisando um pouco resolvi comparar os tipos que o OJB persiste e o MySQL implementa!

]http://dev.mysql.com/doc/mysql/en/Storage_requirements.html


http://db.apache.org/ojb/docu/guides/jdbc-types.html

Não existe tipo binary no MySQL que o OJB diz persistir como byte[]. Então resolvi criar um tipo binary só pra ver como o OJB iria criar a tabela do MySQL! Adivinhou? Pois é!
BLOB!
Ou seja, bastava eu criar um byte[] e passar para o OJB! Coisinha insignificante que pesquisei até a morte no google e não achei nada!
De qualquer maneira, valeu pela dica! Eu estou usando Struts e já conseguia pegar o arquivo tranquilamente.