素材牛VIP会员
覆盖原图之后,长时间不更新
 风***在  分类:Node.js  人气:1279  回帖:3  发布于6年前 收藏

上传覆盖原图,在web的控制面版里下载的图是最新的,而直接访问的图还是老图,很长时间后,才可以得到新图,是缓存时间的问题吗?

有没有方法可以解决?

另外,当新图可以正常访问之后,通过?imageView的形式访问图片,所得的图片还是旧图片的缩略图,一直没有更新。试了下更改?imageView的参数的话,可以直接看到新图的缩略图,有没有可以 覆盖完图片文件之后直接显示最新的图片的api?

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv4 码徒
c2***31 交互设计师 6年前#1

@安坚实 的做法很正确。为了让客户更好的了解我们的缓存机制,我整理了一篇文章,请大家参考并提提建议或者意见:http://kb.qiniu.com/Qiniu-Cloud-Storage-Cache-Strategy

Lv6 码匠
飞***e 产品经理 6年前#2

完全赞同@安坚实,类似的也可以参考豆瓣用户头像保存策略。

Lv6 码匠
西***护 UI设计师 6年前#3

我也一直碰到这个问题,七牛和又拍都是这样。咨询过七牛的客服,也没有得到解决办法。

我估计,七牛和又拍在设计的时候,就没太考虑图片更新的问题,而是主要关注创建、删除等操作。

所以后来我用了这么个解决办法:

  1. 在创建图片以及每次更新图片前,为其生成一个新的版本号,记录到数据库中。 这个版本号可以是递增的数字,也可以是随机数字/字符
  2. 创建/更新/访问图片时,把这个版本号加到原本的图片名的后面。 例如图片名是 a.jpg,生成的版本号是 373,实际使用的图片名就是 a_v373.jpg
  3. 更新完成后,如果需要,可以把上一个版本的图片删除

有一个实际案例。我做了一个商品管理系统,每个商品有一个图片,这个图片是会经常更新的。
我的数据库就这样设计:

goods
  id       int
  name     varchar(50)
  price    int
  pic_ver  int

生成HTML时就是(伪代码):

for goods in goods_list:
  print '<img src="{goods.name}_v{goods.pic_ver}.jpg" />'
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取