七牛图片上传的使用心得[PHP篇]

曾写过一篇文章随便写了写我怎么用七牛的,发现很多小伙伴来问我,这回写个详细的。

前提:

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如何使用,我会再单独写一个文章,写完之后会在此附上链接。

七牛图片上传的使用心得[JS篇]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值