2009-08-03 220 views
0

通過使用下面的功能我緩存JS,在瀏覽器的CSS文件。緩存文件瀏覽器中的

就像聰明我想cahe在瀏覽器中的圖像。

private static void CacheOrFetchFromServer(string relativePath, string absolutePath, HttpContext context) 
{ 
    Cache cache = HttpRuntime.Cache; 
    string content; 
    if (cache[relativePath] == null) 
    { 
     Encoding encoding = Encoding.GetEncoding(DefaultEncodingCodePage); 
     CacheDependency dependency = new CacheDependency(absolutePath); 

     content = File.ReadAllText(absolutePath, encoding); 
     cache.Insert(relativePath, content, dependency); 
    } 
    else 
    { 
     content = cache[relativePath].ToString(); 
    } 

    using (StreamWriter sw = new StreamWriter(context.Response.OutputStream)) 
    { 
     sw.Write(content); 
    } 
} 

我已經嘗試了下面的一個緩存圖像。但它沒有顯示圖像。

private static void CacheOrFetchImageFileFromServer(string relativePath, string absolutePath, HttpContext context) 
{ 
    string extension = System.IO.Path.GetExtension(relativePath); 
    if (extension.ToUpper() == ".JPG" || extension.ToUpper() == ".PNG" || extension.ToUpper() == ".GIF" || extension.ToUpper() == ".TIFF") 
    { 
     Cache cache = HttpRuntime.Cache; 
     System.Drawing.Image imgPhoto = null; 
     if (cache[relativePath] == null) 
     { 
      Encoding encoding = Encoding.GetEncoding(DefaultEncodingCodePage); 
      CacheDependency dependency = new CacheDependency(absolutePath); 

      FileStream fs = File.OpenRead(absolutePath); 
      byte[] data = new byte[fs.Length]; 
      fs.Read(data, 0, data.Length); 

      MemoryStream ms = new MemoryStream(data); 
      Bitmap bmp = new Bitmap(ms); 

      imgPhoto = System.Drawing.Image.FromFile(absolutePath); 
      cache.Insert(relativePath, bmp, dependency); 
     } 
     else 
     { 
      imgPhoto = (Image) cache[relativePath]; 
     } 

     context.Response.Write(absolutePath); 


     //using (StreamWriter sw = new StreamWriter(context.Response.OutputStream)) 
     //{ 
     // sw.Write(absolutePath); 
     //} 
    } 
} 

回答

2

我不知道我明白你在這裏做什麼。所有的
首先,Cache對象在asp.net用於緩存數據的服務器側,而不是在客戶端(瀏覽器)。文件
緩存,特別是CSS,JavaScript和圖像,是通過自動瀏覽器中完成,您不必爲每個文件手動完成。即使您必須手動執行此操作,這也不是方法 - 看起來您只是在服務器的緩存中創建了一個文件副本(我沒有做過測試,但我相信微軟並假設這是已經以某種方式完成了,而你的方式實際上更慢)。
如果你想在客戶端緩存更大的控制權,您可以啓用上的IIS內容過期。