2009-07-29 135 views
0

因为我们每个表单调用的次数多于50次。我怎样才能够缓存客户端的图像。从数据库缓存动态生成的图像

对于每个刷新它调用并命中数据库。

<%@ WebHandler Language="C#" %> 

using System; 
using System.Web; 
using System.Data.SqlClient; 
using App_Code.BLL.Products; 

public class ProductPicture : IHttpHandler 
{ 
    private Product _objProducts; 
    private ProductBL _objProductBL; 

    #region IHttpHandler Members 

    public void ProcessRequest(HttpContext context) 
    { 
     string strSize = context.Request.QueryString["PhotoType"]; 
     _objProducts = new Product(); 
     _objProductBL = new ProductBL(); 

     _objProducts.PictureID = Convert.ToInt32(context.Request.QueryString["PhotoId"]); 
     SqlDataReader objReaderPhoto = _objProductBL.GetPictureByPictureID(_objProducts); 
     if (!objReaderPhoto.HasRows) return; 
     objReaderPhoto.Read(); 
     context.Response.ContentType = "Image/JPEG"; //Convert.ToString(objReaderPhoto["Photograph"]); 
     context.Response.AddHeader("Content-Disposition", "attachment; filename=Image"); 
     switch (strSize) 
     { 
      case "m": 
       context.Response.BinaryWrite((byte[])objReaderPhoto["PictureBinary"]); 
       break; 
      //case "s": 
      // context.Response.BinaryWrite((byte[]) objReaderPhoto["PhotoSearch"]); 
      // break; 
      case "t": 
       context.Response.BinaryWrite((byte[])objReaderPhoto["PictureThumbnail"]); 
       break; 
      default: 
       context.Response.BinaryWrite((byte[])objReaderPhoto["PictureBinary"]); 
       break; 
     } 

     context.Response.Cache.SetLastModified(DateTime.Now.AddYears(-1)); 

     objReaderPhoto.Close(); 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

    #endregion 
} 

回答

2

我不认为你可以缓存它在客户端上,除非它有一个网址“IMG/someimage.gif”,怎么样在HttpContext的缓存缓存的结果?一点帮助Cache