29 Ekim 2008 Çarşamba

ASP.NET de Image'e Veritabanından Resim Yüklemek

Web sitelerinde genellikle Image kontrollerine yüklemek istediğimiz resimler server’da dosya sisteminden çekilir.

Image1.ImageUrl = "C:Resim.jpg";

gibi bir kod parçasıyla istediğimiz resmi yükleriz. Ama bazen resimlerimizi veritabanında tutuyor olup oradan dinamik olarak yüklememiz gerekebilir. (Dynamically load image to Image control from database with Asp.NET) Böyle bir durumda doğrudan atama yapamayız. Ama şu şekilde bir çözüm bulabiliriz.

İlk olarak Default.aspx sayfasını açalım ve bir dynamicImage adlı bir Image kontrolü ekleyelim. Daha sonra yeni bir sayfa ekleyelim ve adını DynamicallyLoadImage.aspx olarak verelim. Eklediğimiz Image kontrolünün ImageUrl özelliğine DynamicallyLoadImage.aspx?ImageID=1 değerini verelim. Default.aspx sayfamızın kodları aşağıdaki gibidir.

Default.aspx



Ve yapacağımız ikinci şey ise DynamicallyLoadImage.aspx.cs dosyasına aşağıdaki kodları yazmak.

using System.Data.OracleClient;
public partial class DynamicallyLoadImage: System.Web.UI.Page {
 protected void Page_Load(object sender, EventArgs e) {
  DataTable dTable = new DataTable();
  string sql = “SELECT ImageData FROM ImageDatabase“;
  sql += “WHERE ImageID = ‘” + Request.QueryString["ImageID"] + ”‘”;
  OracleConnection con = new OracleConnection(“SERVER = (DESCRIPTION = (ADDRESS = “ + “ (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))” +  “ (CONNECT_DATA = (SERVICE_NAME = XE)));“ +  “uid = TAYFUN; pwd = TT123;”);
  OracleDataAdapter adp = new OracleDataAdapter(sql, con);
  adp.Fill(dTable);
  byte[] ImageData = (byte[])(dTable.Rows[0]["ImageData"]);
  try {
   Response.ContentType = “image / jpeg”;
   Response.BinaryWrite(ImageData);
  } catch {
   Response.Write(“Resim Bulunamadı”);
  }
 }
}

İlk olarak, ben Oracle veritabanı kullanmıştım, ama SQL Server kullanılırsa da bir şey fark etmez. İkinci olarak da ben sadece jpeg veya jpg uzantılı resimler için yaptım, farklı bir uzantı gelirse hata verecektir. Dilerseniz uzantıyı da veritabanında kaydederek herhangi bir uzantıya sahip resim için bunu yapabilirsiniz.

Resimlerin veritabanında tutulması güvenlik açısından iyidir, ama performans açısından iyi değildir. Resimleri dosya sisteminde tutup veritabanında da adresini tutarsanız programcılık mantığına daha uygun bir yapı oluşturmuş olursunuz.

Hiç yorum yok:

Yorum Gönder

Related Posts Plugin for WordPress, Blogger...