c# - 用 B 替换服务器上的文件 A,但显示文件 A
问题描述
在删除图像并保存另一个同名文件(即文件被替换)的情况下,我遇到了问题。如下所示:
[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 如何以及为什么会显示在我的网站上?
我无法找到任何资源来说明此问题发生的原因和方式,因此如果重复,我深表歉意。
解决方案
这听起来像是浏览器缓存问题。如果图像的 URL 没有改变,浏览器将使用缓存版本,而不是从服务器获取图像。
您可以通过获取图像文件的最后修改日期/时间将其转换为数字并将其作为查询字符串添加到图像 URL(例如 &t=XXXXX)来解决此问题。这样,当图像文件更改时,URL 也会更改。然后浏览器将加载新图像。
推荐阅读
- node.js - 无法将 node.js 应用程序部署到谷歌云应用程序引擎
- python - Pandas 根据行、列和日期过滤 DataFrame
- angular - 页面加载后找不到嵌套元素
- javascript - 如何为我的数据库查询创建 PEG.js 模式(X "AND" Y "AND" ...)
- r - 在 CRAN sommer 包中预测 BLUP 时,建模年份协变量的最佳方法是什么?
- sql - Informix 的 CASE 语句
- javascript - 为每个步骤应用按钮,或延迟 javascript 递归
- c++ - 提高 OS windows C++ portscanner 的性能
- git - 使用 Git 处理开源项目和其他类型项目的合并冲突的最佳方法
- office365 - 微软图形 | 如何允许应用程序仅访问某些用户或邮箱而不是全部?