【问题标题】:File A replaced on server with B but File A is displayed用 B 替换服务器上的文件 A,但显示文件 A
【发布时间】:2018-05-22 15:29:03
【问题描述】:

在删除图像并保存另一个同名文件(即文件被替换)的情况下,我遇到了问题。如下图:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult _ReplaceGeneral(int ID, HttpPostedFileBase file)
{
     var dbpath = query.FindImages(ID);
     var path = Server.MapPath(dbpath.ImageURL);

     System.IO.File.Delete(path);
     file.SaveAs(path);

     TempData["Message"] = "Image Successfully Replaced!";

     return RedirectToAction("EditGallery");
}

在我的服务器中,文件已成功替换。但是,当我启动网站时,会显示上一张图片。

注意事项:

  • 图像未保存在我的数据库中 - 它保存在我的服务器上,并且 URL 存储在数据库中。

  • 我可以在服务器中实际看到文件被替换,所以我绝对肯定它正在被替换。

问题:即使在将图片 A 替换为图片 B 后,图片 A 如何以及为什么会显示在我的网站上?

我无法找到任何资源来说明此问题发生的原因和方式,因此如果重复,我深表歉意。

【问题讨论】:

  • 你是如何在网站上使用该图片的?
  • @ChetanRanpariya 我有两种理解问题的方式 1. 图片存储在我服务器上的文件夹中。数据库存储这些照片的 URL。 2. 它在 CSS 中作为background-image = "relative path"<img src=@Url.Content()> 标签使用
  • 听起来浏览器正在缓存图像,由于名称没有改变,只是从缓存中加载它。
  • @Diado 我刚刚尝试清除所有浏览器数据,我可以确认这样做时图像确实发生了变化。我该如何解决这个问题?
  • 如果图像保存成功,那么缓存可能是唯一的问题。保存图片后,如果在浏览器中按 Ctrl+F5 刷新页面,是否会显示新图片?

标签: c# asp.net-mvc entity-framework


【解决方案1】:

这听起来像是浏览器缓存问题。如果图片的 URL 没有改变,浏览器将使用缓存版本,而不是从服务器获取图片。

您可以通过获取图像文件的最后修改日期/时间将其转换为数字并将其作为查询字符串添加到图像 URL(例如 &t=XXXXX)来解决此问题。这样,当图像文件更改时,URL 也会更改。然后浏览器将加载新图像。

【讨论】:

  • 假设我需要使用 CSS 背景图像的相对路径。建议的解决方法将不起作用,因为 background-image: url("") 不会改变。我们可以使用其他解决方法吗?
  • 在 HTML 的样式属性中添加 background-image 或在修改图像时修改 CSS(向 CSS 引用添加查询字符串以确保它被更新而不是缓存)。
  • 我知道要问的有点多,但是您有什么资源可以帮助我构建您建议的解决方法吗?
猜你喜欢
  • 2019-01-16
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多