Ler/Gravar imagem no filesystem ou no banco?

Pessoal,

Considerando um sistema Web do tipo álbum de fotos (mostrar várias imagens nas páginas.jsp), implementado em (Java/Servlet/Jsp) utilizando o servidor Tomcat e o bd Firebird.
Qual seria a melhor alternativa para ler/gravar essas imagens? Ler e Salvar as imagens no filesystem ou no banco? Porque?
Alguém teria algum trecho de código exemplo para cada um desses casos?

Mui Grato.

Luciano,

Em um projeto recente na empresa para armazenar fotos (cada uma,
com aprox. 2 megabytes, volume de fotos > 2000 mil) preferi armazenar as fotos no banco de dados.
Estou utilizando o firebird, que tem um excelente suporte a campos BLOB.

No meu caso, preferi criar um novo “banco” dimensionado exclusivamente
para as fotos. Neste caso fiz um pequeno tunning, aumentando o page-size para 16k.

Estou muito satisfeito com a performance. A manutencao é zero.

At.

Marcelo

[quote=“luciano_castilho”]Pessoal,

Considerando um sistema Web do tipo álbum de fotos (mostrar várias imagens nas páginas.jsp), implementado em (Java/Servlet/Jsp) utilizando o servidor Tomcat e o bd Firebird.
Qual seria a melhor alternativa para ler/gravar essas imagens? Ler e Salvar as imagens no filesystem ou no banco? Porque?
Alguém teria algum trecho de código exemplo para cada um desses casos?

Mui Grato.[/quote]

Filesystem, com certeza!

Com o sqlserver o tratamento de campos Imagem é um pouco diferente. Para adiantar alguma coisa, ele não guarda aqueles quilos de bytes nos campos.

É bem rapido, mas nao sei se outros bancos implementam isso desta forma.

Obrigado pelas opniões, porém ainda estou em dúvida.
Por exemplo, como fazer para uma página jsp exibir a imagem que esta armazenada no banco de dados, se no html deve-se indicar a imagem no formato:

<img src="imagens/nome_imagem.jpg">

Existe alguma tag para fazer esse trabalho? Ou um resultSet.getBlob() resolveria?

hehe mais ou menos isso cara. Na verdade você faz uma página como content-type img/jpg e lá você executa o servlet que pegará os bytes. Já que o content-type é imagem, aqueles bytes todos tornar-se-ão uma :smiley:

Ai na página onde você quer mostrar a imagem

Barbada né? :smiley:

[quote=“LIPE”]Ai na página onde você quer mostrar a imagem
[/quote]

Lipe, faltou vc colocar isso dentro das tags de code… :lol:

<img src="http://localhost:8080/Meuservletdeimagem">

[]'s

experiência própria com sistema assim.

Comecei a uns 3 anos atrás um sistema armazenando as imagens no banco de dados. Era o Interbase 6 na época. No começo ficou maravilha, mas a quantidade de imagens crescia absurdamente diariamente, até que chegou a um ponto que as consultas ficavam muito lentas, até mesmo se no Select eu não trouxesse o campo de Imagem (não sei se isso tem algo haver).
Resumindo, precisei gravar tudo no filesystem, e depois disso, já faz uns 2 anos que não tenho mais dor de cabeça com esse sistema, e funciona legal.

Pergunta: vou ter que usar uma servlet só para imagens e no JSP dentro das tags img chamar essa servlet passando-lhe parametros? ex:

<img src="http://localhost:8080/Meuservletdeimagem?cod=01"> <img src="http://localhost:8080/Meuservletdeimagem?cod=02"> <img src="http://localhost:8080/Meuservletdeimagem?cod=etc">

Ou existe alguma outra forma, por exemplo um objeto do tipo blog ou imagem que dê para passar via request ao JSP e então recuperar seu valor (imagem)?
por ex:

<html> <body> <img src="<%= objImagem.show() %>"> </body> </html>

USE ESTA FORMA:

[quote=“luciano_castilho”]Pergunta: vou ter que usar uma servlet só para imagens e no JSP dentro das tags img chamar essa servlet passando-lhe parametros? ex:

<img src="http://localhost:8080/Meuservletdeimagem?cod=01"> <img src="http://localhost:8080/Meuservletdeimagem?cod=02"> <img src="http://localhost:8080/Meuservletdeimagem?cod=etc">[/quote]

Dá uma olhada aqui, para como fazer: http://www.guj.com.br/user.article.get.chain?article.id=138&page=1

Na página 5 fala como fazer com Servlets.