asp.net中的愚蠢缓存

时间:2009-10-28 11:49:53

标签: asp.net image caching

我使用这样的代码

string.Format("<img src='{0}'><br>", u.Avatar);

u.Avatar-它就像'/img/path/pic.jpg'

但是在这个网站上我可以上传新的图片而不是旧的pic.jpg。所以图片新,但名字很旧。和浏览器显示OLD图片(缓存)。如果我把随机数像/img/path/pic.jpg?123然后工作正常,但我只需要上传后,而不是总是。我怎么能解决这个问题?

5 个答案:

答案 0 :(得分:5)

string imgUrl = _
string.Format("<img src='{0}?{1}'><br>", _
u.Avatar, _
FunctionThatLookupFileSystemForItsLastModified(u.Avatar).Ticks.ToString());

答案 1 :(得分:2)

不要直接链接到图像,而是考虑设置一个通用的HTTP处理程序来为图像提供服务。

MSDN: HTTP Handlers and HTTP Modules Overview
Stack Overflow: How to use output caching on .ashx handler

答案 2 :(得分:0)

再次阅读你的帖子,,,抱歉一般回答。

要解决此问题,请执行以下操作 在Application_Start上创建一个包含已上载图像的Dictionary,将其保存在Application对象上,将其设置为null。上传图像后,将其添加到此词典中。将每个地点的头像包含在你的网站上,其功能是在Dictionary中评估图像,如果找到则返回imagename.jpg?randomnumber,然后从Dictionary中删除它,否则只返回一个imagename.jpg。

这将会很重,因为您需要检查字典中的每个图像,但这将完全符合您的需要。

答案 3 :(得分:0)

将DateTime.Now.Ticks附加到图片网址:

string imgUrl = 
    string.Format("<img src='{0}?{1}'><br>", u.Avatar,DateTime.Now.Ticks);
编辑:我认为这种最佳实践甚至是我会使用的做法。鉴于随机实现不是真正随机的情况下给出的信息有限,这只是一个建议。

答案 4 :(得分:0)

您可以使用System.Web.Caching.CacheDependency命名空间设置缓存依赖性。 这可以设置上传文件的依赖性,并在文件更改时自动释放该文件的缓存。

MSDN和其他地方有很多文章和内容,所以我不会详细介绍所有细节。

您可以使用可用的工具执行缓存的插入,删除和其他管理。 (并且这不需要您更改文件名或添加内容 - 它通过文件系统知道文件已更改)