【PHP】七牛云存储API两种本质关系分析

为了七牛大赛!

昨天研究了一下七牛云存储SDK of PHP ,尝试实现了基本的文件上传、移动、复制、删除、下载、生成二维码等等功能,同时对图片文件实现了简单的缩放、查看图片、查看信息、添加水印等等,现在还没有尝试的是大文件上传处理和音视频文件的处理。一整天的研究学习下来发现,其实七牛提供的主要API有两种处理好两种关系就好:第一种是处理文件与服务器之间的关系,第二种是处理文件与客户端的关系。现在简要分析如下。

第一种关系:文件与服务器关系

这里的服务器是指七牛云存储的服务器。
这个关系主要实现七牛对文件的存储管理。存储管理,就是对文件在七牛服务器中的一些操作,简单一点说就是识别、存储、移动、删除、查看信息等等。
国内有各大提供存储服务的厂商,2013年的网盘大战就可以说明国内存储行业竞争是有多么激烈,而如今七牛算是一个比较好的选择。
将自己的文件存储在七牛的 服务器上必须要能辨别出个人的信息,七牛采用了AS和SK的方式保障了这一条要求的实现。AccessKey,SecretKey。一对儿AK/SK来实现对用户 唯一性认证已经是很多平台的选择了,SAE也采用这种方式。这里要注意的是,绝对不要把自己的SK透露给任何人,也绝对不要在开发的时候把自己的SK发送到客户端。通常需要用这一对秘钥生成上传、下载的Token,获取到相应的权限才可以做一些实用的操作。
文件在服务器中是以K-V 键值对存在的,于是在管理界面就没有类似百度云、金山快盘那种文件夹的概念。同时对于每一个用户来说,对文件的管理可以用bucket  这个来实现分类。bucket,空间,每一个用户都可以新建多个空间,而空间也可分为公开空间和私人空间,顾名思义私人空间就是不允许外链或者外部请求的时候需要获取下载Token才可以。

七牛为不同语言都提供了类似的接口,实现了上传、下载、移动、复制、删除等等文件操作,我分析发现PHP、java 、Go三种当中最容易实现的是PHP,功能最多的是Java,而Go语言的怎么说呢,因为七牛本身大部分的核心代码都是Go写的,所以相比其他任何SDK,Go的稳定性以及性能是最好的。只是国内支持Go的空间不多,因此一般没有办法选择Go去做开发。并且Go本身懂的人也不多……

客户端要实现上传、下载、复制、移动等等操作,最重要的是要获取到Token,而最常见的参数是一个空间名和一个文件名,专业一点说是一个bucket和一个key。这两个概念如果不懂可以去看看官网上对上传下载模型的分析。

综上,文件和服务器的关系就是这样了,我们主要做的就是根据不同语言的SDK去调用相关的方法就OK 。

第二种关系:文件与客户端关系

这种关系主要是对HTTP请求的操作。

实现文件下载、查看信息、生成二维码以及对图片的缩放、加水印、旋转等等操作,其实都是基于一个基本的URL然后去做相应的URL改写从而去调用七牛自己的内部处理函数最后返回相应的结果。比如我想缩放一个图片并且自己指定大小,我就可以构造这么一个URL


http://liukaining.qiniudn.com/02.jpg?imageView/w/100/h/300

如果我想给一个图片生成一个二维码,我就可以构造这么一个URL


http://liukaining.qiniudn.com/02.jpg?qrcode/0/L

就是这样!
我们对URL做处理就可以返回想要的结果了,而如此类似的,我们可以为图片加上水印,或者是旋转、裁剪甚至添加样式。

文件和客户端的关系就是,去发出一个HTTP请求,这个请求的URL是基于文件的URL的,然后你做一些修饰加上一些参数,我们就能够得到想要的结果。

上面说的都是公共空间的访问,而一旦客户端想要去访问私有空间的内容,那么就得先去获得token,这是自己服务器去给客户端发送的。

OK,这就是七牛API的两个最重要关系。只要处理好这两个关系,做基本的开发是没有问题的。顺便吐槽一下官网的文档,真的就是一群程序员写的……简单的东西非要绕来绕去说不清楚……真的是……

刘凯宁@C2P
20140819

PS:这是第100篇博客!!!

Share