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
Armazenar imagem em mysql
10 Respostas
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!
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!
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!
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
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:<img src="http://www.mysite.com/servlet/DownloadArquivo?user=joao&codArq=0001" />
Espero ter ajudado, caso tenha confundido, podem perguntar o que ficou em dúvida, mas de modo objetivo… ehheehe
**
*
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!
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.