七牛云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') . '¬ifyURL=' . 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'];
混也是一种生活。。。
合作开发加QQ:781850795