我正在为两个公益网站编写和使用一个非常简单的基于CGI的(Perl)内容管理工具。它为网站管理员提供事件的HTML表单,这些表单将填写字段(日期,位置,标题,描述,链接等)并保存。在该表格上,我允许管理员上传与事件相关的图像。在显示表单的HTML页面上,我还显示了上传图片的预览(HTML img标签)。
当管理员想要更改图片时,会发生此问题。他只需要点击“浏览”按钮,选择一张新照片,然后按OK即可。这很好。
上载图像后,我的后端CGI将处理上载并正确地重新加载表单。
问题是显示的图像 没有 刷新。即使数据库保存了正确的图像,仍会显示旧图像。我将其范围缩小为在网络浏览器中缓存了图像。如果管理员点击Firefox / Explorer / Safari中的RELOAD按钮,一切都会刷新,并且会出现新图像。
我试图通过写一个HTTP Expires指令来控制缓存,该指令的日期已经过去了。
Expires: Mon, 15 Sep 2003 1:00:00 GMT
请记住,我在管理方面,我并不在乎页面的加载时间是否更长,因为它们总是过期的。
但是,这也不起作用。
上载图像时,其文件名不保留在数据库中。它被重命名为 Image.jpg (以简化使用时的处理)。用新图像替换现有图像时,名称也不会更改。只是图像文件的内容会更改。
Web服务器由托管服务/ ISP提供。它使用Apache。
有没有一种方法可以强制Web浏览器不缓存该页面中的内容,甚至不缓存图像?
我正在尝试使用数据库来实际“保存文件名”的选项。这样,如果更改了图像,IMG标签的src也将更改。但是,这需要对整个站点进行大量更改,如果我有更好的解决方案,我宁愿不做。同样,如果上传的新图像具有相同的名称,这仍然不起作用(例如,将该图像进行了照片购物并重新上传)。
Armin Ronacher有正确的想法。问题在于随机字符串可能会发生冲突。我会用:
<img src="picture.jpg?1222259157.415" alt="">
其中“ 1222259157.415”是服务器上的当前时间。 使用Java performance.now()或Python使用生成时间time.time()
performance.now()
time.time()