阿里云ACE存储服务Storage使用方法

       阿里云ACE云引擎已经开放了公测,相信很多初学者对ACE的Storage存储服务不是很清楚,自己写了一个可直接使用的类,主要还是用于上传文件。分享给大家,有新的看法与建议欢迎交流。

  • 下面是自己将官方给的文档整合了一个PHP类。

  • <?php
    /**
     * 阿里云ACE-Storage类
     * User: henrick
     * Email: [email protected]
     * Date: 2015/3/18
     * Time: 15:04
     */
    class AliStorage
    {
        protected $storage;
        protected $storageName;
        protected $allowFileType = 'jpg/jpeg/png/gif/bmp/zip/rar/gz/doc/xls/ppt/docx/xlsx/pptx';
        protected $allowSize = 10485760; //默认10M
        protected $filePath = '';
        protected $fileName = '';
        protected $err = array(
            '3001' => '实例名不能为空!',
            '3002' => '上传阿里云存储服务失败!',
            '4000' => '没有上传文件!',
            '4001' => '文件大小超出限制',
            '4002' => '文件类型不符合上传限制!',
            '4003' => '上传目录创建失败,目录没有权限!',
            '4004' => '文件移动失败!'
        );
    
        /**
         * 初始化参数
         * @param $config = array('storageName','allowFileType','allowSize')
         */
        public function __construct($config = array())
        {
            if(count($config)>=1 && is_array($config))
            {
                $this->storage     = Alibaba::Storage($config['storageName']);
                $this->storageName = $config['storageName'];
                $this->allowFileType = $config['allowFileType'] ? $config['allowFileType']:$this->allowFileType;
                $this->allowSize = $config['allowSize'] ? $config['allowSize']*(1024*1024):$this->allowSize;
            }
    
        }
    
        /**
         * 文本形式保存
         * @param $key
         * @param $value
         * @return mixed
         */
        public function saveText($key,$value,$express='')
        {
            if($express)
            {
                $result = $this->storage->saveText($key,$value,$express);
            }
            else
            {
                $result = $this->storage->saveText($key,$value);
            }
            return $result;
        }
    
        /**
         * 检查文件是否存在
         * @param $key
         * @return mixed
         */
        public function fileExists($key)
        {
            return $this->storage->fileExists($key);
        }
    
        /**
         * 返回meta信息
         * @param $key
         * @return $array('date','content-type','content-length','connection','accept-ranges',
         * 'etag','expires','last-modified','server','x-oss-request-id','x-oss-request-url','x-oss-redirects');
         */
        public function getMeta($key)
        {
            return $this->storage->getMeta($key);
        }
    
        /**
         * 保存文件
         * @param $content
         * @param $fileName
         * @return mixed
         */
        public function saveFile($content,$fileName)
        {
            return $this->storage->saveFile($content,$fileName);
        }
    
        /**
         * @param 复制文件
         * @return mixed
         */
        public function copy($key,$newFile)
        {
            return $this->storage->move($key,$newFile);
        }
    
        /**
         * 删除文件
         * @param $key
         * @return mixed
         */
        public function delete($key)
        {
            return $this->storage->delete($key);
        }
    
        /**
         * 获取文件
         */
        public function get($key)
        {
            return $this->storage->get($key);
        }
    
        /**
         * 上传文件
         */
        public function upload($file,$fileName='',$descPath = '')
        {
            $this->filePath = empty($descPath) ? 'upload/'.date('Ym').'/':$descPath;
            $this->fileName = empty($fileName) ? date('YmdHis').mt_rand(1,999999):$fileName;
            if(!is_array($_FILES[$file]))
            {
                return $this->err[4000];
            }
            $file = $_FILES[$file];
    
            $extArr = pathinfo($file['name']);
            $ext = $extArr['extension'];
    
            if(!strstr($this->allowFileType,$ext))
            {
                return $this->err[4002];
            }
    
            if($file['size']>=$this->allowSize)
            {
                return $this->err[4001];
            }
    
            if(!is_dir($this->filePath))
            {
                $mk = mkdir($this->filePath,0777,true);
                if(!$mk)
                {
                    return $this->err[4003];
                }
            }
            $descPath = $this->filePath.$this->fileName.'.'.$ext;
            if(!move_uploaded_file($file['tmp_name'],$descPath))
            {
                return $this->err[4004];
            }
    
            $uid = $this->_createGuid();
            $result = $this->saveFile($uid,$descPath);
            if(!$result)
            {
                return $this->err[3002];
            }
            $info = array(
                'err' => 0,
                'filePath' => $descPath, //当前服务器文件
                'key'      => $uid, //阿里云存储服务文件key,用于获取文件。
                'ext'      => $ext
            );
            return $info;
        }
    
        protected function _createGuid($nameSpace = '')
        {
            $guid = '';
            $uid = uniqid("", true);
            $data = $nameSpace;
            $data .= $_SERVER['REQUEST_TIME'];
            $data .= $_SERVER['HTTP_USER_AGENT'];
            $data .= $_SERVER['LOCAL_ADDR'];
            $data .= $_SERVER['LOCAL_PORT'];
            $data .= $_SERVER['REMOTE_ADDR'];
            $data .= $_SERVER['REMOTE_PORT'];
            $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
            $guid = date('YmdHis').'-'.substr($hash,  0,  8).'-'.substr($hash,  8,  4).
                '-'.substr($hash, 12,  4).'-'.substr($hash, 16,  4).'-' .substr($hash, 20, 12);
            return $guid;
    }
    }
  • 使用方法Dome:

  • <?php
    include('../core/aliStorage.class.php');
    $config = array(
        'storageName'   => 'test',
        'allowFileType' => 'jpg/jpeg/png/gif',
        'allowSize'     => 3
    );
    if($_FILES['img'])
    {
        //上传图片,返回当前上传的路径、文件类型及Storage文件的惟一标识。
        $aliStorage = new AliStorage($config);
        $info = $aliStorage->upload('img');
        print_r($info);
        exit();
    }
    
    if(isset($_GET['key']))
    {
        //获取文件内容
        $aliStorage = new AliStorage($config);
        $result = $aliStorage->get($_GET['key']);
        echo $result;
    }
    //更多的方法就不一一介绍了。
  • 下面附上下载地址:

   http://git.oschina.net/henrick/ACE-Storage

你可能感兴趣的:(ACE,storage)