欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

如何上传文件到七牛云存储时覆盖已有的文件

在七牛默认的上传策略中,是不允许覆盖已有文件的,这是一种保护机制。但有时候我们确实需要覆盖原有的文件,这应该怎么办呢?下面就来说说如何上传文件时覆盖已有的文件。

要实现这一操作,必须在上传策略中进行配置,然后生成uptoken。比如,在PHP服务端中,我们有个生成uptoken的方法,这里我们以CI框架为例。在此之前,建议大家先看看我之前的一篇文章《在CodeIgniter框架中使用plupload插件上传文件到七牛云存储》,因为载入七牛sdk需要修改一点东西。

 

这样默认生成的uptoken是默认上传新资源,而不允许覆盖原有的资源。如果要覆盖原有资源,那必须满足两个条件:

  1. 设置上传策略中的Scope属性格式为:<bucket>:<key>
  2. 要保存的key必须和上面Scope设置的key严格一致

例如,原先七牛云存储上有一张名为sun.jpg的图片,我们希望上传新的图片区覆盖它,那就需要这样设置:

这样生成的uptoken被七牛服务端接收到之后,服务器就会将新上传的图片覆盖掉原有的sun.jpg。

具体的上传策略大家可以去官网看看,虽然七牛的文档写得很多,但也写得相对比较乱,需要多点耐心。

上传策略:http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html

需要注意的,由于七牛存在缓存策略,所以被覆盖的文件不会马上被显示出来,有可能你虽然成功覆盖了原文件,但需要强制刷新浏览器几下,或者在七牛后台手动刷新缓存才能看到最新的文件。

所以我还是建议大家不要使用覆盖的方法去更新文件,最好是重新上传新文件,再将旧的删除,这样新上传的文件能马上读取到。

有可能是cdn缓存导致的覆盖上传后,访问到的文件仍然是旧的资源,你可以通过url?v=20150309对资源进行访问,如果是访问到的最新的资源,说明资源覆盖成功了;一般资源的缓存刷新时间是10min开始刷新,24h全网刷新,如果你对资源更新的实时性要求比较高,你可以在空间设置的高级设置中刷新下资源的url,另外也可以采用资源url加上查询参数的方式去访问资源。

来自  http://caiweiming.com/?p=75

普通分类: