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