七牛云Fetch第三方资源并转码(PHP版)

七牛云的图片加速一直在用,好用没得说,最近项目需要做个微信端录音,然后上传,别人试听的功能,录音和上传用的都是微信的接口,有文档,比较方便,但是上传后,微信只给保存3天,所以就下载到了七牛,也就用到了七牛的fetch功能,这步搞定之后,又发现,微信录音生成的amr音频在安卓机能正常播放(据说也只能在微信内置浏览器播放),苹果机却不行,各种搜索,都只能使用转码,虽然知道七牛云可以可以转音频,但是实时转换的接口被停用了,只能持久化转换,到这里时,已经有一点排斥心理,其一是担心持久转换时间过长,不能实现上传后就能播放,其二就是不得不说,七牛的文档好乱,好多相关的东西不在一起写,要分别找,而且描述的不清楚,另外吐槽下,给的PHP SDK也有点问题,返回bad token。。。。但是七牛云的服务还是很好的,嘿嘿

话不多说,下面上代码,两个函数,大家参考,同样基于ThinkPHP开发的哈,很多参数直接用C方法读的配置文件哦

1、下载第三方资源到七牛,只要传入第三方资源地址即可

 1 function qiniuFetch($url){
 2     $encodedURL = str_replace(array('+', '/'), array('-', '_'), base64_encode($url));
 3     $encodedEntryURI = str_replace(array('+', '/'), array('-', '_'), base64_encode(C('QINIU_BUCKET')));
 4     $url = '/fetch/' . $encodedURL . '/to/' . $encodedEntryURI;
 5     $sign = hash_hmac('sha1', $url . "\n", C('QINIU_SK'), true);
 6     $token = C('QINIU_AK') . ':' . str_replace(array('+', '/'), array('-', '_'), base64_encode($sign));
 7     $header = array('Host: iovip.qbox.me', 'Content-Type:application/x-www-form-urlencoded', 'Authorization: QBox ' . $token);
 8     $curl = curl_init();
 9     curl_setopt($curl, CURLOPT_URL, trim('http://iovip.qbox.me' . $url, '\n'));
10     curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
11     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
12     curl_setopt($curl, CURLOPT_POSTFIELDS, "");
13     $result = json_decode(curl_exec($curl), true);
14     curl_close($curl);
15     return $result['key'] ? C('QINIU_HOST') . $result['key'] : false;
16 }

2、转换七牛云资源的格式,只要传入源文件的key即可,好像还支持指定另存为***文件,需要在fops那加上通道命令,时间紧就没研究

 1 function qiniuConvert($key){
 2     $data = 'bucket=' . C('QINIU_BUCKET') . '&key=' . $key . '&fops=' . urlencode('avthumb/mp3') . '&notifyURL=' . urlencode('http://abc.com/qiniuConvertNotice') . '&pipeline=pingshizx';
 3     $sign = hash_hmac('sha1', "/pfop/\n" . $data, C('QINIU_SK'), true);
 4     $token = C('QINIU_AK') . ':' . str_replace(array('+', '/'), array('-', '_'), base64_encode($sign));
 5     $header = array('Content-Type:application/x-www-form-urlencoded', 'Authorization: QBox ' . $token);
 6     $curl = curl_init();
 7     curl_setopt($curl, CURLOPT_URL, 'http://api.qiniu.com/pfop/');
 8     curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
 9     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
10     curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
11     $result = json_decode(curl_exec($curl), true);
12     curl_close($curl);
13 }

通知结果的处理,这里返回的只是文件的key,需要加上空间地址才能访问哦

$data = json_decode(file_get_contents("php://input"), true);
return $data['items'][0]['key'];

 

posted @ 2016-04-12 09:35  张小牛  阅读(4813)  评论(0编辑  收藏  举报