2009-08-03 3 views
0

Используя нижеследующую функцию, я кеширую js, css-файл в браузере.Кэширование файлов в браузере

Как мудрый, я хочу, чтобы изображение было в браузере.

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 и изображений, выполняется браузером автоматически, вам не нужно делать это вручную для каждого файла. И даже если вам нужно было сделать это вручную, это не так, похоже, вы просто создаете копию файла в кеше сервера (я не проводил тестов, но я доверяю Microsoft и полагаю, что это уже сделано в некотором роде, и ваш путь на самом деле медленнее).
Если вы хотите усилить контроль над кешированием на стороне клиента, вы можете включить истечение срока действия контента в IIS.

Смежные вопросы