有没有一种方法可以强制浏览器刷新/下载图片?

71

我遇到一个问题,用户报告说他们上传的图像没有成功,旧的图像仍然存在。经过仔细检查,新的图像已经被成功上传,只是它们的文件名与旧的相同。在上传时,为了SEO目的,我对图像进行了重命名操作。当用户删除图像后,原来的索引变得可用并被重复使用,因此会有相同的图像名称。

有没有一种方法(我认为可能会有一个meta标签可以实现)能够告诉浏览器不要使用缓存?

更好的解决方案是将图像重新命名为全新的名称。我将着手解决这个问题,但同时也提供了一个快速解决方案,即重新命名图像文件来代替重复利用原有名称的方式。


如果您想在缓存中更新而不是更改URL,请参考以下链接:https://dev59.com/ZHVC5IYBdhLWcg3w-mZO#70954519 - Ravi Singh
14个回答

2

看起来更关注的是主用户是否能够看到他们的新图像,而不是完全禁用缓存?如果是这种情况,你可以执行以下操作:

var headers = new Headers()
headers.append('pragma', 'no-cache')
headers.append('cache-control', 'no-cache')

var init = {
  method: 'GET',
  headers: headers,
  mode: 'no-cors',
  cache: 'no-cache',
}

fetch(new Request('path/to.file'), init)

如果在上传新图片后执行此操作,浏览器应该会看到这些标头并调用后端,跳过缓存。新图片现在在该URL下的缓存中。主要用户将看到新图像,但您仍保留所有缓存的好处。其他任何查看此图像的用户将在一天左右看到更新,一旦他们的缓存失效。
如果更关心确保所有用户看到最新版本,则应使用其他解决方案之一。

1

那个结果不太好,我认为这是正确编程的方法。

 <td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>

1
在PHP中,您可以发送一个随机数或当前时间戳:
<img src="image.jpg?<?=Date('U')?>">

或者

<img src="image.jpg?<?=rand(1,32000)?>">

1

我之前遇到了这个问题。而我是通过AJAX以JSON格式获取数据。 所以我做的就是,加入了一个Math.random()的Javascript函数,它起到了很好的作用。 我使用的后端是flask。

<img class="card-img-top w-100 d-block" style="padding:30px;height:400px" src="static/img/${data.image}?${Math.random()} ">


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接