七牛雲的圖片加速一直在用,好用沒得說,最近項目需要做個微信端錄音,然后上傳,別人試聽的功能,錄音和上傳用的都是微信的接口,有文檔,比較方便,但是上傳后,微信只給保存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'];