欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

七牛上传分享

侯哥写得七牛上传,在这里分享一下。

 

001<?php
002/**
003 *
004 * @author hou.yongxu
005 * @date 2016/6/20
006 */
007Yii::import('application.extensions.qiniu.*');
008require_once('pfop.php');
009require_once('http.php');
010require_once('io.php');
011require_once('rs.php');
012require_once('fop.php');
013require_once('utils.php');
014 
015 
016class QiNiu
017{
018    private $_bucket "";
019    private $_key1 "";
020    private $_accessKey '';
021    private $_secretKey '';
022    private $_domain '';
023    private $_pipeline '';            //队列
024    private static $_self = null;
025    function QiNiu($params array())
026    {
027        //测试配置
028        $default = Yii::app()->params['qiniuConfig'];   //默认参数配置
029        $default array_merge($default$params);      //传过来的参数
030        $this->_bucket = $default['bucket'];
031        $this->_accessKey = $default['accessKey'];
032        $this->_secretKey = $default['secretKey'];
033        $this->_domain = $default['domain'];
034        $this->_pipeline = $default['pipeline'];
035        Qiniu_SetKeys($this->_accessKey, $this->_secretKey);
036    }
037    
038    /**
039     * config
040     * @param unknown $params
041     * @return QiNiu
042     */
043    public static function getInstance($params array())
044    {
045        return self::$_self === null ? (self::$_self new QiNiu($params)) : self::$_self;
046    }
047    
048    /**
049     * 文件上传
050     * @param string $key   生成图片的key
051     * @param sring $file   要上传的文件
052     * @param array $option 保存多个缩略图文件
053     * @return Ambigous <multitype:NULL unknown , multitype:NULL Qiniu_Error , multitype:NULL Ambigous <NULL, mixed> , multitype:unknown Qiniu_Error >|boolean
054     * option = array(
055     *  'files' => array(
056            array('w'=>200, 'h'=>100, 'filename'=>'ab1.jpg'),
057            array('w'=>200, 'filename'=>'ab2.jpg'),
058        );
059     * )
060     */
061    public function upload($key$file$option array())
062    {
063        $putPolicy new Qiniu_RS_PutPolicy($this->_bucket . ':' $key);
064        $saveas '';
065        if(!empty($option['files']))
066        {
067            $saveas $this->_get_saveas_str($option['files']);
068        }
069        
070        $putPolicy->PersistentPipeline=$this->_pipeline;
071        $putPolicy->PersistentOps = $saveas;
072        $putPolicy->ReturnBody = '{"key":$(key),"hash":$(etag),"pid":$(persistentId)}';
073        
074        $upToken $putPolicy->Token(null);
075        $putExtra new Qiniu_PutExtra();
076        $putExtra->Crc32 = 1;
077        list($ret$err) = Qiniu_PutFile($upToken$key$file$putExtra);
078        if ($err !== null) {
079            return $err;//不处理返回错误信息
080        }
081        //清除出现saveas不成功的问题重新切图
082        if(!empty($option['files']))
083        {
084            $this->save($key$option['files']);
085            /**
086            foreach($option['files'] as $item)
087            {
088                $flg = $this->save($key, $item);
089            }
090            **/
091        }
092 
093        return true;
094    }
095    
096    /**
097     * 生成 saveas 一定要有filename否则异常
098     * @param unknown $data
099     * @param string $fops
100     */
101    private function _get_saveas_str($data$fops '')
102    {
103        if(isset($data['filename']))
104        {
105            $temp $fops ';' '';
106            $fops .= $temp "imageView/2";
107            $fops .= empty($data['w']) ? '' : ('/w/' $data['w']);
108            $fops .= empty($data['h']) ? '' : ('/h/' $data['h']);
109            $entry .= Qiniu_Encode("{$this->_bucket}:{$data['filename']}");
110            $fops .= '|saveas/' $entry ;
111        }
112        else
113        {
114            foreach($data as $item)
115            {
116                $fops $this->_get_saveas_str($item$fops);
117            }
118        }
119        return $fops;
120    }
121    
122    /**
123     * 另存为 暂时只支持 w h filename 参数 ,支持多数组    带有签名的url赞不支持多维数组,支持一维 
124     * @param unknown $key
125     * @param unknown $data
126     * @return Ambigous <multitype:NULL unknown , multitype:NULL Qiniu_Error , multitype:NULL Ambigous <NULL, mixed> , multitype:unknown Qiniu_Error >
127     * @dese 2种数组格式 array('w'=>对应的值,'h','filename'=>'必须存在') | array(array('w','h','filename'=>'必须存在'), array('w','h','filename'=>'必须存在'))
128     */
129    public function save($key$data)
130    {
131        $fops $this->_get_saveas_str($data);
132        if(empty($fops))
133        {
134            return false;
135        }
136        //生成签名
137        //$sgin = $this->_get_savese_sgin($key, $fops);
138        //生成带有签名的url
139        //echo $return_url = 'http://' . $this->_domain . '/' . $key . '?' . $fops . '/sign/' . $sgin, "<br/>";
140        $client new Qiniu_MacHttpClient(null);
141        $pfop new Qiniu_Pfop();
142        $pfop->Pipeline=$this->_pipeline;
143        $pfop->Key = $key;
144        $pfop->Bucket = $this->_bucket;
145        $pfop->Fops =  $fops ;
146        $pfop->Force = 1;
147        //访问生成
148        return $pfop->MakeRequest($client);
149    }
150    
151    /**
152     * 返回签名
153     * @param string $fops
154     */
155    private function _get_savese_sgin($key$fops)
156    {
157        $this->_mac = Qiniu_RequireMac($this->_mac);
158        $sgin $this->_domain . '/' $key '?' $fops;
159        return $this->_mac->Sign($sgin);
160    }
161    
162    /**
163     * 删除
164     * @param unknown $key
165     */
166    public function delete($key)
167    {
168        $client new Qiniu_MacHttpClient(null);
169        return Qiniu_RS_Delete($client$this->_bucket, $key);
170    }
171}

 

 

著作权归叶子博客所有。商业转载请联系博主获得授权,非商业转载请注明出处
本文出处:https://www.yezismile.com/index/titleinfo/id/410
来自 https://www.yezismile.com/index/titleinfo/id/410

普通分类: