MENU

CI框架接入阿里云OSS新版本SDK

July 5, 2017 • PHP

在最近使用的新项目中需要接入阿里云的OSS服务,之前老的项目用的是1.0的版本。于是这次去看一眼发现阿里云已经更新了OSS的SDK版本,所以记录一下简单的接入过程。当前用的是2.2.4

安装SDK

首先还是推荐使用composer的方式来安装

composer require aliyuncs/oss-sdk-php

安装完成后你可以在你需要自定义的类库中使用require_once __DIR__ . '/vendor/autoload.php';来进行引入。但是CI3已经支持composer的方式来自动加载了。只需要在config.php中将composer_autoload的值设置为composerautoload.php文件就可以

$config['composer_autoload'] = realpath(APPPATH . '../vendor/autoload.php');

这样就已经完成了类库的自动加载。下面进行自定义类库的操作部分。

在CI中使用自定义类库引入

首先还是Libraries目录下新建一个CI_OSS.php文件。

vagrant@homestead:/srv/code/MongoDB/application/libraries
.
├── CI_OSS.php
├── easemob.php
├── easemob.txt
├── index.html
├── Mongo_db.php
├── Redis.php

然后编写如下内容

<?php defined('BASEPATH') OR exit('No direct script access allowed');

use OSS\OssClient;
use OSS\Core\OssException;

/**
 * 阿里云OSS存储公共库
 */
class CI_OSS
{

    private $_CI;
    private $_oss;

    function __construct()
    {
        $this->_CI =& get_instance();
        $this->_CI->load->config('oss');
        $config = $this->_CI->config->item('oss');

        if (isset($this->_oss)) {
            return $this->_oss;
        }
        $this->_oss = new OssClient(
            $config['accessKeyId'],
            $config['accessKeySecret'],
            $config['endpoint']
        );
    }

    /**
     * 使用魔术方法捕获所有未注册方法
     * @param  [type] $method    [调用的方法名]
     * @param  [type] $param_arr [调用这个方法所传递的参数]
     * @return [type]            [description]
     */
    public function __call($method, $param_arr)
    {
        return call_user_func_array([$this->_oss, $method], $param_arr);
    }

}

注意这里我使用了一个魔术方法__call这样就可以在调用SDK方法时直接使用CI的方式来调用了。

配置秘钥文件

同样的,我们在config目录下建立一个oss.php的秘钥配置文件

<?php

$config['oss']['accessKeyId'] = 'your accessKeyId';
$config['oss']['accessKeySecret'] = 'your accessKeySecret';
$config['oss']['endpoint'] = 'oss-cn-hangzhou.aliyuncs.com';

测试SDK

到此为止不出意外我们就已经把sdk引入到我们的项目中了,在使用的时候就可以和使用ci的库一样来调用sdk中的方法。所以我们简历一个控制器文件来测试一下。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Test extends CI_Controller
{
    function __construct() {
      parent::__construct()
    }
  
      /**
     * 阿里云OSS SDK测试方法
    */
    public function oss()
    {
        $this->load->library('CI_OSS');

        $bucketListInfo = $this->ci_oss->listBuckets();
        //$bucketList = $bucketListInfo->getBucketList();
        dump($bucketListInfo);
    }
}
BucketListInfo {#23 ▼
  -bucketList: array:2 [▼
    0 => BucketInfo {#26 ▼
      -location: "oss-cn-shanghai"
      -name: "icache"
      -createDate: "2016-08-10T02:54:18.000Z"
    }
    1 => BucketInfo {#24 ▼
      -location: "oss-cn-hangzhou"
      -name: "staticache"
      -createDate: "2014-07-24T14:37:59.000Z"
    }
  ]
}

好了,到此为止就已经完成了sdk的简单集成。

阿里云SDK文档