2009-08-03 12 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

ここで何をしているのか分かりません。
まず、asp.netのCacheオブジェクトは、クライアント側(ブラウザ)ではなくサーバー側のデータをキャッシュするために使用されます。
ファイルのキャッシュ、特にCSS、JavaScript、および画像のアップロードは、ブラウザによって自動的に行われます。すべてのファイルに対して手動で行う必要はありません。これを手動で行う必要があったとしても、これは方法ではありません。サーバーのキャッシュにファイルのコピーを作成しているように見えます(テストは行っていませんが、Microsoftを信頼し、すでに何らかの形で行われており、あなたの方法は実際には遅い)。
クライアント側のキャッシュをより詳細に制御したい場合は、IISでコンテンツの有効期限を有効にすることができます。

関連する問題