曾写过一篇文章随便写了写我怎么用七牛的,发现很多小伙伴来问我,这回写个详细的。
前提:
1.已经有七牛账号,创建了空间,能看到AccessKey/SecretKey;
2.你知道怎么用composer,你对前后端都比较了解;
3.你有理由使用七牛;
开始第一步
第一步:安装PHP-SDK,使用composer:composerrequire qiniu/php-sdk;
第二步:编写七牛类
我用的是Yii框架,但是这个类貌似没用到Yii的什么东西,大家可以参考,注释写的也比较全了,代码后我会解释。
<?php
namespace common\models;
use Qiniu;
use Qiniu\Auth;
use Qiniu\Storage\BucketManager;
use Yii;
use yii\base\Model;
class Qniu extends Model
{
/**
* 获取缓存图片的Token
*/
static function getCacheToken()
{
$const_arr = Yii::$app->params['qiniu']['const'];
// 初始化签权对象
$auth = new Auth($const_arr['access_key'], $const_arr['secret_key']);
// 要上传的空间
$bucket = '******';
// 生成上传 Token
$token = $auth->uploadToken($bucket, null, 3600, ['deleteAfterDays' => 1], false);
return $token;
}
/**
* 拷贝图片
*/
static function copyto($key_from, $key_to)
{
$const_arr = Yii::$app->params['qiniu']['const'];
// 初始化签权对象
$auth = new Auth($const_arr['access_key'], $const_arr['secret_key']);
// 初始化BucketManager
$bucketMgr = new BucketManager($auth);
// 空间名称
$bucket = '******';
// 将$key_from复制到$key_to。可以在不同bucket复制 第一个$bucket是源,第二个$bucket是目标
$err = $bucketMgr->copy($bucket, $key_from, $bucket, $key_to);
if ($err !== null) {
return false;
}
return true;
}
static function deletekey($key)
{
$const_arr = Yii::$app->params['qiniu']['const'];
// 初始化签权对象
$auth = new Auth($const_arr['access_key'], $const_arr['secret_key']);
// 空间名称
$bucket = '******';
// 初始化BucketManager
$bucketMgr = new BucketManager($auth);
// 删除$bucket中的文件$key
$err = $bucketMgr->delete($bucket, $key);
if ($err !== null) {
return false;
}
return true;
}
}
为什么要获取一个缓存token呢?那你要问问自己为什么要用七牛保存图片,我是为了两点
第一:用七牛上传和下载速度不用我担心,也不占用我自己网站的带宽;
第二:七牛什么融合CDN加速,看起来屌屌的,屌屌的东西就是要用一用;
对了!还有最关键的一点,以我的网站现在的流量,就是在免费用;
既然我要省带宽,那我就不能让用户把图片传到我的服务器,然后我再发送给七牛,而是用户直接放到七牛上,但是呢,用户直接放到七牛上,我还不知道这个图片用户到底用没用,那怎么办?那就让用户上传一个缓存图片,只缓存一天,用户如果使用这个图片了,一定会提交一个表单,表单中会带有图片的key,也就是地址,然后我再把这个图片变成永久的,就全都OK啦~
但是这里有一个坑:七牛没有缓存转永久的办法(也可能是我对七牛不够了解),所以我的办法是复制用户缓存的图片到另外一个地方,就变成永久的了。
所以总体流程是这样的(以修改个人信息为例):
1.用户来到修改个人信息页面,这时候去自己的服务器获取缓存七牛Token,也就是我写的那个getCacheToken方法。
2.Plupload得到了Token,用户选择头像时选择一个图片,点击上传,就传到了七牛服务器上,然后七牛会返回一个key,这时把key保存起来。
3.用户修改其他信息,姓名之类的,修改完成后用户点击保存。
4.后台接受到用户的表单,把其中的图片的key取出来,调用copyto方法,把key复制成另一个key,然后将其他信息和新的key保存,并返回给前端。
这时候整个流程就完事了。
后端PHP的事基本就完事了(我省略了编写api接口的过程),剩下的就是前端的细节问题。
前端我推荐大家使用Plupload插件,具体Plupload如何使用,我会再单独写一个文章,写完之后会在此附上链接。