在我的asp.net Web应用程序中,我在主页面上有一个asp.net图像控件。用户可以上传和更改图像。但是由于某些原因,保存在服务器中的图像名称应保持不变。通常,此图像应在浏览器中缓存。
当用户尝试通过上传新图像来更改图像时,图像文件会在服务器上被替换,但用户仍然在浏览器中看到缓存的图像。是否有办法只在保存新图像时刷新浏览器中缓存的图像?
您可以使用的一个技巧来防止缓存是在图像末尾连接一个随机字符串:
<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);
一种解决方案是使用File.GetLastWriteTime来附加到图像url。
这样做会有一些性能损失,但如果您的名称必须保持不变,并且希望实时更新缓存,则可以使用此方法:
string imageUrl = "/images/user.jpg";
imageUrl += "?ver=" + File.GetLastWriteTime(Server.MapPath(imageUrl)).ToFileTime();
另一个解决方案是在数据库中跟踪图像版本,每当用户上传新图像时,更改版本并将其附加到URL。