You are here
thinkphp七牛上传音视频并添加预处理转码操作代码汇总
星期三, 2017-06-07 21:06 — adminshiping1
七牛的音视频转码一共有两种方式可以操作:1. 是上传后立即触发音视频转码转码,可以再上传策略中设置persistentOps、persistentPipeline和persistentNotifyUrl,参考上传预转的详解【developer.qiniu.com/docs/v6/api/reference/security/put-policy.html#put-policy-persistent-ops-explanation】。2. 直接触发持久化操作,接口规格是http://developer.qiniu.com/docs/v6/api/reference/fop/pfop/pfop.html ,是POST请求。下面将介绍在ThinkPHP框架(3.2.3)中如何实现上传音视频,并在上传策略中添加转码命令的操作:一、修改ThinkPHP中七牛上传驱动文件\Library\Think\Upload\Driver\Qiniu\QiniuStorage.class.php1、public function UploadToken($sk ,$ak ,$param)函数中添加如下选项// 新增视频预处理操作[www.scutephp.com]if (!empty($param['persistentOps'])) {$data['persistentOps'] = $param['persistentOps'];}if (!empty($param['persistentPipeline'])) {$data['persistentPipeline'] = $param['persistentPipeline'];}if (!empty($param['persistentNotifyUrl'])) {$data['persistentNotifyUrl'] = $param['persistentNotifyUrl'];}2、新增如下两个函数备用/*** 对提供的数据进行urlsafe的base64编码。
*
* @param string $data 待编码的数据,一般为字符串
*
* @return string 编码后的字符串
* @link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64
*/
public function base64_urlSafeEncode($data)
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($data));
}
/**
* 对提供的urlsafe的base64编码的数据进行解码
*
* @param string $str 待解码的数据,一般为字符串
*
* @return string 解码后的字符串
*/
public function base64_urlSafeDecode($str)
{
$find = array('-', '_');
$replace = array('+', '/');
return base64_decode(str_replace($find, $replace, $str));
}
3、public function upload($config, $file)函数添加如下代码
if(!$config) $config = $this->config;
// 新增视频预处理操作
if($config['persistentOps']){
$config['persistentOps'] = str_replace('###', $this->base64_urlSafeEncode($this->bucket.':'.$file['fileName']), $config['persistentOps']);
}
二、PHP上传音视频并预处理转码控制器代码
// 文件上传[www.scutephp.com]
public function upload_video() {
$setting=C('UPLOAD_SITEIMG_QINIU');
//转码是使用的队列名称。
$pipeline = 'guronge';
//要进行转码的转码操作。
$fops = "avthumb/flv/vb/1.25m";
//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
$savekey = '###';
$fops = $fops.'|saveas/'.$savekey;
$policy = array(
'persistentOps' => $fops,
'persistentPipeline' => $pipeline,
// 'persistentNotifyUrl' => U('Uploadqn/notifyurl')
);
$setting['driverConfig'] = array_merge($setting['driverConfig'], $policy);
$upload = new \Think\Upload($setting);// 实例化上传类
$upload->maxSize = 0;// 设置附件上传大小
$upload->exts = array('mp4', 'flv', 'avi');// 设置附件上传类型
$upload->savePath = 'video/';// 设置附件上传目录
$info = $upload->upload();
ob_end_clean();
if(!$info) {// 上传错误提示错误信息
//echo $upload->getError();
echo 'error';
}else{// 上传成功
// var_dump($info);die;
echo $tmp = 'http://www.scutephp.com/'.$info["Filedata"]['savepath'].$info["Filedata"]['savename'];
}
}
三、javascript(JS)(表单)实现上传音视频并预处理转码
1、PHP生成签名代码
// 七牛上传凭证
$config = C('UPLOAD_SITEIMG_QINIU.driverConfig');
$qiniu = new \Think\Upload\Driver\Qiniu\QiniuStorage($config);
//转码是使用的队列名称。
$pipeline = 'guronge';
//要进行转码的转码操作。
$waterimg = $qiniu->base64_urlSafeEncode('http://www.scutephp.com/define/logo.png');
$fops = "avthumb/flv/s/800x600/autoscale/1/vb/1.25m/wmImage/".$waterimg."/wmOffsetX/-15/wmOffsetY/15";
//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
// $savekey = '###';
$randname = 'scutephp.com/video/'.date('Ymd').'/'.date('His').join('', unique_rand(0, 100, 8)).'.flv';
$this->randname = $randname;
$key = $qiniu->base64_urlSafeEncode($config['bucket'].':'.$randname);
$fops = $fops.'|saveas/'.$key;
$policy = array(
'persistentOps' => $fops,
'persistentPipeline' => $pipeline,
// 'persistentNotifyUrl' => U('Uploadqn/notifyurl')
);
$config = array_merge($config, $policy);
$this->qn_token = $qiniu->UploadToken($config['secretKey'], $config['accessKey'], $config);
2、前端JS或者表单
(1)使用uploadify文件上传插件构造表单(推荐)
var token = '{$qn_token}';
var randname = '{$randname}';
$("#file").uploadify({
width:200,
height:35,
auto:true,
// 七牛表单
fileObjName:'file',
formData: {token: token, key:randname, accept:'application/json'},
(2)HTML表单上传
<form method="post" action="http://upload.qiniu.com/"
enctype="multipart/form-data">
<input name="key" type="hidden" value="<resource_key>">
<input name="x:<custom_name>" type="hidden" value="<custom_value>">
<input name="token" type="hidden" value="<upload_token>">
<input name="file" type="file" />
<input name="crc32" type="hidden" />
<input name="accept" type="hidden" />
</form>
各参数注意细节:http://developer.qiniu.com/article/kodo/kodo-developer/up/upload-types.html#form-upload
demo及原代码下载:http://www.kubiji.cn/topic-id2251.html
来自 http://www.thinkphp.cn/extend/773.html