Veritabından Resim Göstermek

9 Ağustos Cumartesi, 2008 | Asp.net C# Ado.Net Sql /*Yorumlar (2)*/

Öğrencilerimin en sık sorduğu sorulardan biri de, veritabanında depolanmış resimleri web sayfasında nasıl gösterildiğidir. Internette bu konu hakkında zilyon tane yazı olmasına karşın bir tane yazma gereği hissettim.

Öncelikle anlaşılması gereken konu, html sayfalarında resim göstermenin ilk koşulu resmin fiziksel yolunun kontrole yada etikettage aktarılmasıdır.
Örneğin;

image

Diğer taraftan baktığımızda ki bu taraf veritabanı tarafıdır, resim gibi içeriklerin hangi tip veri alanında saklanacağıdır.
C# ile yazılım geliştiryorsanız resim yada bir dosya serileştiğinde (yani veritabına yazıldığında) byte dizisinden (byte[]) ibaret olacaktır. Bu durumda en uygun alan tipi varbinarybyte[] olsa iyi olur. :)

Kaçınılması gereken davranışlar.

eval

yada

reader

hiç olmadı :)

executescalar

Peki yapılması gereken nedir? Veritabınından okunan byte dizisini resim formatında dışarı aktaracak (response) bir dosya (aspx,ashx) oluşturmak ve oluşan dosyanın yolunu resmi gösterecek kontrol yada etikete atamaktır.

Binary Picture

Örnek tabloda gösterildiği gibi resim UrunResim alanında varbinarybyte[] olarak saklanıyor.

Binary Table

Resmi oluşturacak resim.aspx sayfasına gönderilen parametre değeri ile veritabanında basit bir sorgu yapılarak ve sonucu byte dizisi olarak elde edilir.

sql

Son olarak ise sayfa çıktısının resim olacağını işaret eder ve çıktıyı BinaryWriter metotu ile oluştururuz.

Yorumlar

Ersin Demiray

Peki bu kısma kadar database'den kontrol ettiğim 21KB lık resim.    byte[] resim = (byte[])com.ExecuteScalar(); 
   con.Close(); 
   Response.ContentType = "image/png"

   Response.BinaryWrite(resim);

Bu aşamadan sonra nasıl 51 KB'ta kadar çıkıyor. Çözümü var mı?  

28 Ağustos Cumartesi, 2010

Emre AYRILMAZ

Selam, yorumdan sonra bir kez daha farklı formatlarda (jpeg,png) ve farklı veri alanlarında (varbinary, image vs) test ettim. Testler sırasınsa bir artışa rastlamadım. Projeni ve tablo yapını info@ayrilmaz.com adresine gönderirsen belki biraz daha yardımcı olabilirim.

30 Ağustos Pazartesi, 2010

Yorum Yaz

Ad

Email (sahte adresli yorumlar silinir.)

Yorum