使用七牛点播平台的文件元信息获取的 CORS 问题

七牛的 bucket 有三种使用场景

  • 通用。适用于图片、在线处理的网络文件等
  • 下载分发。适合大文件,例如安装包等
  • 点播平台。适合用于 MP4/FLV 等按时间点播的文件

如果你把音视频文件放到第三类点播平台下,那么你将无法获得文件的元信息(就是 GET 文件链接加上 ?avinfo 方式),七牛会一直返回 No Access-Control-Allow-Origin 错误。甚至你添加 crossdomain.xml 到 bucket,这个错误也会随机出现,因为这个场景使用到了第三方的播放器,发生了 302 跳转,所以有前述问题。

我的解决办法就是把音频文件放到通用类的 bucket 里。这样就可以在不加载整个音频文件的前提下获取到音频的属性了,节省些流量。

这是你就需要重新创建一个通用的 bucket,把之前在点播平台 bucket 里的文件拷贝过去。


分享下我的拷贝方法(Mac OS X)

  1. 首先下载七牛的 qshell 命令行程序。在这里

  2. 按照文档设置好 account 的 accessKey 和 secretKey

    例子: qshell account ELUs327kxVPJrGCXqWae9yioc0xYZyrIpbM6Wh6o LVzZY2SqOQ_I_kM1n00ygACVBArDvOWtiLkDtKi_

    第一个是你的 AccessKey, 第二个是 SecretKey

  3. 解压后得先下载 bucket 里的所有文件列表

    ./qshell_darwin_amd64 listbucket your-bucket-name output.txt

  4. 去除掉文件列表里的不必要信息

    awk '{print $1}' output.txt >> audio.txt

  5. 拷贝

    /qshell_darwin_amd64 batchcopy source-bucket target-bucket audio.txt

你的文件就拷贝到新的 bucket 了。