风一样的回忆

新浪微薄腾讯微薄

最新碎语:从未遇见一位没亏过钱的富人,却遇见许多从未亏掉一毛钱的穷人

您的位置:风一样的回忆 >php> php实现七牛网址资源直传详解

php实现七牛网址资源直传详解

今天开发采集图片要上传到七牛功能,发现调用七牛上传组件,nginx出现502错误,折腾了一下午没找到问题解决方案,只好考虑直传。经过一番百度搜索,意外发现七牛原来也支持第三方资源抓取上传,正好满足开发需求。

按照官网例子尝试上传,结果出现以下错误:

"error":"incorrect region"

又一番百度搜索,通过下面文章找到解决办法,原来是空间所在区域不对,需要找到对应的上传域名

参考文章:https://blog.csdn.net/bernieyangmh/article/details/78048365

解决办法:通过v1接口获取允许的上传域名

https://uc.qbox.me/v1/query?ak={ak}&bucket={bucket}

注意:使用file_get_contents调用上述接口会获取域名数组,随便选一个域名就行了。

下面是直传函数,若借用,请自行替换参数值

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

返回结果参考官网:https://developer.qiniu.com/kodo/api/1263/fetch#4

---

转载请注明本文标题和链接:《php实现七牛网址资源直传详解

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交