七牛云SDK

thinkphp3.2.3集成七牛云SDK

1. 安装七牛云SDK,然后引入(请参考thinkphp3.2.3引入第三方包

2. 配置七牛云参数

//七牛云配置
    'accessKey' => 'XXX',//秘钥
    'secrectKey' => 'XXX',//秘钥
    'domain' => 'o7atl50ri.bkt.clouddn.com',//域名,这里是七牛云提供的测试域名
    'bucket' => 'XX',//'<空间名称>',

3. 改写七牛云SDK

  class FileController extends Controller
{ 
    /**
     * 获得七牛云权鉴
     */
    public function getAuthQiniu()
    {
        $auth = new \Qiniu\Auth(C('accessKey'), C('secrectKey'));
        return $auth;
    }

    /**
     * 获取单个文件信息
     */
    public function getFile($key)
    {
        //初始化Auth状态
        $auth = $this->getAuthQiniu();

        //初始化BucketManager
        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        //你要测试的空间, 并且这个key在你空间中存在
        $bucket = C('bucket');

        //获取文件的状态信息
        list($ret, $err) = $bucketMgr->stat($bucket, $key);
        if ($err !== null) {
            return $err;
        } else {
            return $ret;
        }
    }

    /**
     * 获取文件列表,默认为10个,没有过滤条件
     */
    public function listFiles()
    {
        $auth = $this->getAuthQiniu();
        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        // 要列取的空间名称
        $bucket = C('bucket');

        // 要列取文件的公共前缀
        $prefix = '';

        $marker = '';
        $limit = 10;

        list($iterms, $marker, $err) = $bucketMgr->listFiles($bucket, $prefix, $marker, $limit);
        if ($err !== null) {
            return $err;
        } else {
            return $iterms;
        }
    }

    /**
     * 删除文件
     */
    public function delete($key)
    {
        //初始化Auth状态
        $auth = $this->getAuthQiniu();

        //初始化BucketManager
        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        //你要测试的空间, 并且这个key在你空间中存在
        $bucket = C('bucket');

        //删除$bucket 中的文件 $key
        $err = $bucketMgr->delete($bucket, $key);
        if ($err !== null) {
            return $err;
        }
    }

    /**
     * 修改文件MIME类型
     *
     */
    public function putMime($key, $mime)
    {
        // 构建鉴权对象
        $auth = $this->getAuthQiniu();

        // 空间
        $bucket = C('bucket');

        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        $err = $bucketMgr->changeMime($bucket, $key, $mime);

        if ($err !== null) {
            return $err;
        }
    }

    /**
     * 修改文件名
     *
     */
    public function rename($key, $newKey)
    {
        // 构建鉴权对象
        $auth = $this->getAuthQiniu();

        // 指定空间
        $bucket = C('bucket');

        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        $err = $bucketMgr->rename($bucket, $key, $newKey);

        if ($err !== null) {
            return $err;
        }
    }

    /**
     * 复制文件
     */
    public function copy($bucket, $key, $bucket2, $key2)
    {
        //初始化Auth状态
        $auth = $this->getAuthQiniu();

        //初始化BucketManager
        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);

        $err = $bucketMgr->copy($bucket, $key, $bucket2, $key2);
        if ($err !== null) {
            return $err;
        }
    }

    /**
     * 移动文件
     */
    public function move($bucket, $key, $bucket2, $key2)
    {
        //初始化Auth状态
        $auth = $this->getAuthQiniu();

        //初始化BucketManager
        $bucketMgr = new \Qiniu\Storage\BucketManager($auth);


        $err = $bucketMgr->move($bucket, $key, $bucket2, $key2);

        if ($err !== null) {
            return $err;
        }
    }

    /**
     * 上传,客户端直传七牛云
     */
    public function uploadQiniu($filePath, $key)
    {

        // 构建鉴权对象
        $auth = $this->getAuthQiniu();

        // 要上传的空间
        $bucket = C('bucket');

        // 生成上传 Token
        $token = $auth->uploadToken($bucket);

        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new \Qiniu\Storage\UploadManager();

        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
        if ($err !== null) {
            return $err;
        } else {
            return $ret;
        }
    }

    /**
     * 下载文件URL
     * $attname=false 如果希望浏览器的动作是下载而不是打开(显示图片).默认false表示打开,true表示直接下载.
     *
     * imageView2=0 限定缩略图的长边最多为<LongEdge>,短边最多为<ShortEdge>,进行等比缩放,不裁剪.从应用场景来说,模式0适合移动设备上做缩略图
     * imageView2=1 限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,居中裁剪
     * imageView2=2 限定缩略图的宽最多为<Width>,高最多为<Height>,进行等比缩放,不裁剪.模式2适合PC上做缩略图
     * imageView2=3 限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,不裁剪.你可以理解为模式1是模式3的结果再做居中裁剪得到的。
     * imageView2=4 限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,不裁剪。这个模式很适合在手持设备做图片的全屏查看(把这里的长边短边分别设为手机屏幕的分辨率即可),生成的图片尺寸刚好充满整个屏幕(某一个边可能会超出屏幕)。
     * imageView2=5 限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,居中裁剪。同上模式4,但超出限定的矩形部分会被裁剪。
     *
     * $format      新图的输出格式.取值范围:jpg,gif,png,webp等,默认为原图格式。
     * $interlace   是否支持渐进显示 取值范围:1 支持渐进显示,0不支持渐进显示(默认为0)。 适用目标格式:jpg 效果:网速慢时,图片显示由模糊到清晰。
     * $q           新图的图片质量 取值范围是[1, 100],默认75。 七牛会根据原图质量算出一个修正值,取修正值和指定值中的小值。 注意: ● 如果图片的质量值本身大于90,会根据指定值进行处理,此时修正值会失效。 ● 指定值后面可以增加 !,表示强制使用指定值,如100!。 ● 支持图片类型:jpg。
     * $ignore_error 可选 取值:1 ● 未设置此参数时,正常返回处理结果。 ● 设置了此参数时,若图像处理的结果失败,则返回原图。 ● 设置了此参数时,若图像处理的结果成功,则正常返回处理结果。
     *
     * @param $key
     * @param bool $attname
     * @param int $imageView2
     * @param int $w
     * @param $h
     * @param $format
     * @param int $interlace
     * @param int $q
     * @param int $ignore_error
     * @return string
     */
    public function getDownloadUrl($key,$attname=false,$imageView2,$w,$h,$format,$interlace=1,$q=75,$ignore_error=1)
    {
        // 构建鉴权对象
        $auth = $this->getAuthQiniu();

        //baseUrl构造成私有空间的域名/key的形式
        $domain = C('domain');
        //拼接URL(还未签名)$domain和$key为必须
        $baseUrl = 'http://' . $domain . '/'.$key.'?';
        //调用了imageView2接口,才拼接imageView2的处理参数
        if($imageView2){
            $baseUrl .= 'imageView2/'.$imageView2;
            if($w){ $baseUrl .= '/w/'.$w; }
            if($h){ $baseUrl .= '/h/'.$h; }
            if($format){ $baseUrl .= '/format/'.$format; }
            if($interlace){ $baseUrl .= '/interlace/'.$interlace; }
            if($q){ $baseUrl .= '/q/'.$q; }
            if($ignore_error){ $baseUrl .= '/ignore-error/'.$ignore_error; }
        }

        if($attname){ $baseUrl = $baseUrl.'&attname='.$key; }

        $authUrl = $auth->privateDownloadUrl($baseUrl);//下载链接有效期3600秒
        return $authUrl;
    }
}

results matching ""

    No results matching ""