您现在的位置是: 首页 > 技术分享 >
七牛上传分享
侯哥写得七牛上传,在这里分享一下。
<?php
/**
*
* @author hou.yongxu
* @date 2016/6/20
*/
Yii::import('application.extensions.qiniu.*');
require_once('pfop.php');
require_once('http.php');
require_once('io.php');
require_once('rs.php');
require_once('fop.php');
require_once('utils.php');
class QiNiu
{
private $_bucket = "";
private $_key1 = "";
private $_accessKey = '';
private $_secretKey = '';
private $_domain = '';
private $_pipeline = ''; //队列
private static $_self = null;
function QiNiu($params = array())
{
//测试配置
$default = Yii::app()->params['qiniuConfig']; //默认参数配置
$default = array_merge($default, $params); //传过来的参数
$this->_bucket = $default['bucket'];
$this->_accessKey = $default['accessKey'];
$this->_secretKey = $default['secretKey'];
$this->_domain = $default['domain'];
$this->_pipeline = $default['pipeline'];
Qiniu_SetKeys($this->_accessKey, $this->_secretKey);
}
/**
* config
* @param unknown $params
* @return QiNiu
*/
public static function getInstance($params = array())
{
return self::$_self === null ? (self::$_self = new QiNiu($params)) : self::$_self;
}
/**
* 文件上传
* @param string $key 生成图片的key
* @param sring $file 要上传的文件
* @param array $option 保存多个缩略图文件
* @return Ambigous <multitype:NULL unknown , multitype:NULL Qiniu_Error , multitype:NULL Ambigous <NULL, mixed> , multitype:unknown Qiniu_Error >|boolean
* option = array(
* 'files' => array(
array('w'=>200, 'h'=>100, 'filename'=>'ab1.jpg'),
array('w'=>200, 'filename'=>'ab2.jpg'),
);
* )
*/
public function upload($key, $file, $option = array())
{
$putPolicy = new Qiniu_RS_PutPolicy($this->_bucket . ':' . $key);
$saveas = '';
if(!empty($option['files']))
{
$saveas = $this->_get_saveas_str($option['files']);
}
$putPolicy->PersistentPipeline=$this->_pipeline;
$putPolicy->PersistentOps = $saveas;
$putPolicy->ReturnBody = '{"key":$(key),"hash":$(etag),"pid":$(persistentId)}';
$upToken = $putPolicy->Token(null);
$putExtra = new Qiniu_PutExtra();
$putExtra->Crc32 = 1;
list($ret, $err) = Qiniu_PutFile($upToken, $key, $file, $putExtra);
if ($err !== null) {
return $err;//不处理返回错误信息
}
//清除出现saveas不成功的问题重新切图
if(!empty($option['files']))
{
$this->save($key, $option['files']);
/**
foreach($option['files'] as $item)
{
$flg = $this->save($key, $item);
}
**/
}
return true;
}
/**
* 生成 saveas 一定要有filename否则异常
* @param unknown $data
* @param string $fops
*/
private function _get_saveas_str($data, $fops = '')
{
if(isset($data['filename']))
{
$temp = $fops ? ';' : '';
$fops .= $temp . "imageView/2";
$fops .= empty($data['w']) ? '' : ('/w/' . $data['w']);
$fops .= empty($data['h']) ? '' : ('/h/' . $data['h']);
$entry .= Qiniu_Encode("{$this->_bucket}:{$data['filename']}");
$fops .= '|saveas/' . $entry ;
}
else
{
foreach($data as $item)
{
$fops = $this->_get_saveas_str($item, $fops);
}
}
return $fops;
}
/**
* 另存为 暂时只支持 w h filename 参数 ,支持多数组 带有签名的url赞不支持多维数组,支持一维
* @param unknown $key
* @param unknown $data
* @return Ambigous <multitype:NULL unknown , multitype:NULL Qiniu_Error , multitype:NULL Ambigous <NULL, mixed> , multitype:unknown Qiniu_Error >
* @dese 2种数组格式 array('w'=>对应的值,'h','filename'=>'必须存在') | array(array('w','h','filename'=>'必须存在'), array('w','h','filename'=>'必须存在'))
*/
public function save($key, $data)
{
$fops = $this->_get_saveas_str($data);
if(empty($fops))
{
return false;
}
//生成签名
//$sgin = $this->_get_savese_sgin($key, $fops);
//生成带有签名的url
//echo $return_url = 'http://' . $this->_domain . '/' . $key . '?' . $fops . '/sign/' . $sgin, "<br/>";
$client = new Qiniu_MacHttpClient(null);
$pfop = new Qiniu_Pfop();
$pfop->Pipeline=$this->_pipeline;
$pfop->Key = $key;
$pfop->Bucket = $this->_bucket;
$pfop->Fops = $fops ;
$pfop->Force = 1;
//访问生成
return $pfop->MakeRequest($client);
}
/**
* 返回签名
* @param string $fops
*/
private function _get_savese_sgin($key, $fops)
{
$this->_mac = Qiniu_RequireMac($this->_mac);
$sgin = $this->_domain . '/' . $key . '?' . $fops;
return $this->_mac->Sign($sgin);
}
/**
* 删除
* @param unknown $key
*/
public function delete($key)
{
$client = new Qiniu_MacHttpClient(null);
return Qiniu_RS_Delete($client, $this->_bucket, $key);
}
}
分享:
上一篇: 程序员何苦为难程序员
下一篇: 囧事大聚会
