laravel之Qiniu

来源:互联网 发布:xp网络共享一键设置 编辑:程序博客网 时间:2024/06/04 18:17
前提:搭建好laravel运行环境


准备工作:Qiniu官方网站下载php版本的jdk
                           下载js版本的jdk
(官方网址: http://developer.qiniu.com/download/index.html)


vendor文件夹下的qiniu文件夹放到laravel的vendor文件夹内
根据qiniu官方vendor内部的composer配置,配置laravel的vendor中的composer


laravel:app文件夹下面建立Contracts(接口), Services(实现接口),文件夹


配置所需参数
config/cdn.php


<?php


return [
    'qiniu' => [
        'domain' => '7xp26c.com1.z0.glb.clouddn.com',
        'access_key' => 'peI4rQd3L612TsXq8dQBRGfeYc4g9iuHnY_WqRnU',
        'secret_key' => '43kCFazP_Wigavd00yO11Y0Pp1aR42QWDDDf4o3i',
        'bucket' => 'archist-test',
    ],
];


(1)定义接口
Contracts/Cdn/CdnProvider.php:
<?php


namespace App\Contracts\Cdn;


interface CdnProvider
{
    public function getResourceUrl($key, array $size = null);


    public function getCdnMogr2Resource($key, array $size = null);
}


(2)实现接口
Services/Qiniu.php
<?php


namespace App\Services;


use App\Contracts\Cdn\CdnProvider;
use Qiniu\Auth;


class Qiniu implements CdnProvider
{
    private $domain;


    private $accessKey;


    private $secretKey;


    private $bucket;


    public function __construct($domain)
    {
        $this->domain = $domain;
    }


    public function setDomain($domain)
    {
        $this->domain = $domain;
    }


    public function setAccessKey($accessKey)
    {
        $this->accessKey = $accessKey;
    }


    public function setSecretKey($secretKey)
    {
        $this->secretKey = $secretKey;
    }


    public function setBucket($bucket)
    {
        $this->bucket = $bucket;
    }


    public function getResourceUrl($key, array $size = null)
    {
        $keyEsc = str_replace('%2F', '/', rawurlencode($key));
        if ('/' == $keyEsc[0] || '@' == $keyEsc[0]) {
            $keyEsc = '@' . $keyEsc;
        }


        $imageview = '';
        if ($size) {
            $imageview = 'imageView2';
            if (isset($size['mode'])) {
                $imageview .= '/' . $size['mode'];
            } else {
                $imageview .= '/1';
            }


            if (isset($size['width'])) {
                $imageview .= '/w/'. $size['width'];
            }


            if (isset($size['height'])) {
                $imageview .= '/h/'. $size['height'];
            }
        }
        return "http://{$this->domain}/{$keyEsc}?{$imageview}";
    }


    public function getCdnMogr2Resource($key, array $size = null) {
        $keyEsc = str_replace('%2F', '/', rawurlencode($key));
        if ('/' == $keyEsc[0] || '@' == $keyEsc[0]) {
            $keyEsc = '@' . $keyEsc;
        }


        $imageview = '';
        if ($size && (isset($size['width']) || isset($size['height']))) {
            $imageview = 'imageMogr2';
            $mode = isset($size['mode']) ? $size['mode'] : 'thumbnail';
            $width = isset($size['width']) ? $size['width'] : '';
            $height = isset($size['height']) ? $size['height'] : '';
            $gravityType = isset($size['gravity_type']) ? $size['gravity_type'] : 'center';


            $imageview .= '/' . $mode . '/!'. $width . 'x'. $height . 'r' . '/gravity/'. $gravityType .
                '/crop/' . $width . 'x'. $height;


        }
        return "http://{$this->domain}/{$keyEsc}?{$imageview}";
    }


    public function getUptoken($bucket = false)
    {
        if (!$bucket) {
            $bucket = $this->bucket;
        }


        if (!$bucket) {
            throw new \InvalidArgumentException('bucket is required');
        }


        $auth = new Auth($this->accessKey, $this->secretKey);


        return $auth->uploadToken($bucket);
    }


    public function getAuth()
    {
        return new Auth($this->accessKey, $this->secretKey);
    }

}


(3)注册生成单例对象
Providers/AppServiceProvider.php
    public function register()
    {
        $this->app->singleton('cdn', function () {
            $domain = config('cdn.qiniu.domain');
            $cdn = new Qiniu($domain);
            $cdn->setAccessKey(config('cdn.qiniu.access_key'));
            $cdn->setSecretKey(config('cdn.qiniu.secret_key'));
            $cdn->setBucket(config('cdn.qiniu.bucket'));


            return $cdn;
        });
    }




前台引入js:jquery->plupload.full.min.js(Moxie.swf)->qiniu.min.js->自定义.js
$(function() {
    var containerUploader = Qiniu.uploader({
        runtimes: 'html5,flash,html4',
        browse_button: 'avator',
        container: 'avator-wrapper',
        dragdrop: true,
        drop_element: 'avator-wrapper',
        max_file_size: '10mb',
        flash_swf_url: 'Moxie.swf',
        chunk_size: '4mb',
//route定义:Route::controllers(['cdn' => 'QiniuCdnController']);
        uptoken_url: '/cdn/uptoken',
        domain: '7xp26c.com1.z0.glb.clouddn.com',
        get_new_uptoken: false,
        unique_names: true,
        auto_start: true,
        multi_selection: false,
        filters: {
            mime_types: [
                {
                    title : 'Image files',
                    extensions : 'jpg,jpeg,gif,png'
                }
            ]
        },
        init: {
            FilesAdded: function (up, files) {
            },
            FileUploaded: function (up, file, info) {
                var domain = up.getOption('domain'),
                    result = $.parseJSON(info),
                    sourceLink = 'http://' + domain + '/' + result.key;


                $('#avator').attr('src', sourceLink);
            },
            Error: function (up, err, errTip) {
                $.notify(errTip);
            }
        }
    });
});



1 0