要上传图片我使用简单的帖子形式:
查看:
<img src="@getImagePath()" />
@using(Html.BeginForm("SaveImage", "ImageController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="image" />
<input type="submit" value="Upload image" />
}
发布操作:
[HttpPost]
[NoCache]
public ActionResult SaveImage(HttpPostedFileBase image)
{
SaveImage(image);
return RedirectToAction("Index");
}
页面操作:
[NoCache]
public ViewResult Index()
{
return View();
}
所以基本情况是:我得到显示图像的页面和表单以上传此图像。我上传图像,基本上重新加载页面,所以应该显示新上传的图像,但我看到的只是旧图像。当我再次手动刷新页面时,我看到我上传的新图像。 如何强制浏览器显示新图片而不是显示新图片?我建议,它会存储在其缓存中吗?为实现此目的,我实施了NoCacheAttribute
并将其用于Index
和SaveImage
行动。
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public sealed class NoCacheAttribute : FilterAttribute, IResultFilter
{
public void OnResultExecuting(ResultExecutingContext filterContext){}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
var cache = filterContext.HttpContext.Response.Cache;
cache.SetCacheability(HttpCacheability.NoCache);
cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);
cache.SetExpires(DateTime.Now.AddYears(-5));
cache.AppendCacheExtension("private");
cache.AppendCacheExtension("no-cache=Set-Cookie");
cache.SetProxyMaxAge(TimeSpan.Zero);
cache.SetNoStore();
}
}
但这个解决方案对我没有帮助。 我仍然需要手动刷新页面才能看到新上传的图片。