12 Temmuz 2013 Cuma

Custom Handler ile resim çağırmak (asp.net)

Custom Handler ile resim çağırmak (asp.net)

Konu başlıkları

 [gizle]

Motivasyon

http://forum.ceviz.net/showthread.php?t=61515 adresindeki konuya cevap olarak eklenmiştir.

Versiyon

Burada verilen örnek kodlar asp.net 2.0 ve üzerinde çalışabilir. Eski versiyonlarda da handler desteği vardır. Ancak sonuca hızlı ulaşmak adına anlatımı ihmal edilmiştir.

Ön bilgi

Amacımız, bir resim dosyasını çağırmayı nasıl bir .net sınıfına bağlayacağımızı basit bir şekilde göstermektir. Bunu bir custom handler kullanarak yapacağız. Bu örneği inceleyen kişi, kolayca örneği geliştirip resim çağrılırken sayaç işletme vs. kodlarını da içine ekleyebilir.

Örnek kullanım

Bu kod ile App_Data içinde bulunan /urun_resim klasörünüzden herhangi bir resmi çekmeniz için, örneğin
<img src="resim.axd?resim=resim.jpg"/>
Şeklinde çağırabilirsiniz. Resmin bulunamaması durumunda App_Data/urun_resim klasöründe blank100x100.jpg isminde bembeyaz bir resmin bulunduğunu da bu örnekte varsayıyoruz. Herhangi bir hata durumunda bu boş resim dosyası yanıt olarak dönecektir.

Kodlar

web.config dosyasınra yapılması gereken değişiklik:
<configuration>
  <system.web>
    <httpHandlers>
      <add verb="*" path="resim.axd" type="ornek_isimalani.ResimHandler" validate="false"/>
    </httpHandlers>
  </system.web>
</configuration>
App_Code klasörünün içinde oluşturacağımız herhangi bir .cs uzantılı dosya içinde, (örneğin ben ismini resim.cs yaptığımızı varsayacağım) resim.cs :
/*
 * SharpDevelop Tarafından Oluşturulmuşdur.
 * Kullanıcı: anov
 * Tarih: 08.07.2008
 * Zaman: 14:46
 * 
 * Bu şablonu değiştirmek için Araçlar | Seçenekler | Kodlama | Standart Başlıkları Düzenle 'yi kullanın.
 */
 
using System;
using System.Drawing;
using System.Web;
 
namespace ornek_isimalani
{
 /// <summary>
 /// Description of UrunResimHandler.
 /// </summary>
 public class ResimHandler : IHttpHandler
 {
  public ResimHandler()
  {
  }
 
  public bool IsReusable {
   get {
    return true;
   }
  }
 
  public void ProcessRequest(HttpContext context)
  {
   if(context.Request.QueryString["resim"]==null) return;
   string resim= context.Request.QueryString["resim"];
   //---
   context.Response.ContentType = "image/jpeg";
   context.Response.Clear();
   Image i = null;
   try
   {
    i = Image.FromFile(context.Server.MapPath("App_Data/urun_resim/"+ resim));
   }
   catch
   {
 
    i = Image.FromFile(context.Server.MapPath("App_Data/urun_resim/blank100x100.jpg"));
 
   }
   finally
   {
    i.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
   }
   //hata durumunda boş resim döndürelim.
  }
 }
}

Sorular

Sorularınız için bu maddenin "Tartışma" sayfasını kullanıp "+" işaretiyle yeni mesaj oluşturabilirsiniz. Teşekkürler.

Hiç yorum yok:

Yorum Gönder