如何刷新浏览器缓存中的图片?

4
在我的asp.net Web应用程序中,我在主页面上有一个asp.net图像控件。用户可以上传和更改图像。但是由于某些原因,保存在服务器中的图像名称应保持不变。通常,此图像应在浏览器中缓存。 当用户尝试通过上传新图像来更改图像时,图像文件会在服务器上被替换,但用户仍然在浏览器中看到缓存的图像。是否有办法只在保存新图像时刷新浏览器中缓存的图像?
2个回答

8

您可以使用的一个技巧来防止缓存是在图像末尾连接一个随机字符串:

  <img src="/images/nocache.jpg?34343434" />

.aspx代码

<asp:Image id="Image1" runat="server" />

代码后台:

    string baseImage = "/images/nocache.jpg";
    int rand = new Random().Next(99999999);
    Image1.ImageUrl = string.Concat(baseImage, '?', rand);

1
带有查询字符串的请求将永远不会被浏览器缓存。我希望这个图像被缓存,但在更改图像时,应该强制刷新此图像的浏览器缓存.. 可以使用服务器端代码或客户端代码.. - kaypee
在这种情况下,您可以附加源图像文件的上次修改日期时间,而不是随机数。 - geedubb
不错,谢谢... :) - Kenzo_Gilead

4

一种解决方案是使用File.GetLastWriteTime来附加到图像url。

这样做会有一些性能损失,但如果您的名称必须保持不变,并且希望实时更新缓存,则可以使用此方法:

string imageUrl = "/images/user.jpg";
imageUrl += "?ver=" + File.GetLastWriteTime(Server.MapPath(imageUrl)).ToFileTime(); 

另一个解决方案是在数据库中跟踪图像版本,每当用户上传新图像时,更改版本并将其附加到URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接