在浏览器中缓存文件

时间:2009-08-03 05:53:56

标签: asp.net

通过使用以下功能,我在浏览器中缓存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 个答案:

答案 0 :(得分:2)

我不确定我明白你在这里做什么 首先,asp.net中的Cache对象用于缓存服务器端上的数据,而不是客户端(浏览器)上的数据。
文件缓存,特别是css,JavaScript和图像,由浏览器自动完成,您不必为每个文件手动执行此操作。即使您必须手动执行此操作,也不是这样 - 看起来您只是在服务器缓存上创建该文件的副本(我没有进行过测试,但我相信Microsoft并假设这是已经以某种方式完成了,你的方式实际上是慢的。) 如果您希望更好地控制客户端缓存,则可以在IIS上启用内容过期。

答案 1 :(得分:0)