在我的asp.net Web应用程序中,母版页中有一个asp.net图像控件。用户可以上传和更改图像。但是,由于某些原因,保存在服务器中的图像名称应保持不变。通常,此图像应缓存在浏览器中。
当用户尝试通过上传新图像来更改图像时,该图像文件将在服务器中被替换,但用户仍会在浏览器中看到缓存的图像。无论如何,是否仅在保存新图像时刷新浏览器中缓存的图像?
您可以用来防止缓存的一个技巧是将随机字符串连接到图像的末尾:
1
| <img src="/images/nocache.jpg?34343434" /> |
.aspx代码
后面的代码:
1 2 3
| string baseImage ="/images/nocache.jpg";
int rand = new Random ().Next(99999999);
Image1 .ImageUrl = string.Concat(baseImage, '?', rand ); |
- 带有查询字符串的请求将永远不会被浏览器缓存。我希望缓存此图像,但是在更改图像时,应使用服务器端代码或客户端代码来强制刷新此图像的浏览器缓存。
-
在这种情况下,您可以附加上次修改源图像文件的日期时间,而不是随机数。
-
好东西。谢谢... :)
一种解决方案是使用File.GetLastWriteTime附加到图像URL。
您会因此而受到一些性能影响,但是如果您的名字必须保持不变并且您想要实时更新缓存,这将对您有效:
1 2
| string imageUrl ="/images/user.jpg";
imageUrl +="?ver=" + File.GetLastWriteTime(Server.MapPath(imageUrl)).ToFileTime(); |
其他解决方案是跟踪数据库中的图像版本,每当用户上传新图像时,您都将更改版本并将其附加到url。
|