來源:http://my.oschina.net/rain21/blog/477019php
PHPSDK下載:http://pan.baidu.com/s/1o69TGcMhtml
DEMO:
ajax
<?php require_once './vendor/autoload.php'; use Qiniu\Auth; use Qiniu\Storage\BucketManager; use Qiniu\Storage\UploadManager; $accessKey = 'accessKey'; $secretKey = 'secretKey'; $auth = new Auth($accessKey, $secretKey); $bucketMgr = New BucketManager($auth); $bucket = 'wsy100'; $key = 'QQ圖片20150604131612.png'; //文件刪除 /* $err = $bucketMgr->delete($bucket, $key); if ($err !== null) { var_dump($err); } else { echo 'delete ok'; } */ /* * 單個文件 * list($ret, $err) = $bucketMgr->stat($bucket, $key); echo "\n====> stat result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); } */ $token = $auth->uploadToken($bucket); $uploadMgr = New UploadManager(); list($ret, $err) = $uploadMgr->putFile($token, time().'.jpg', 'C:\Users\Administrator\Pictures\images\20150604131612.png'); echo "\n====> putFile result: \n"; if ($err !== null) { var_dump($err); } else { print_r($ret); }
上傳遠程URL文件:
json
$url='http://img.hb.aicdn.com/b3ddfada312d19dc0be9f17f9ca497767cb657871f50a-Hj44uu_fw658'; $ret=$bucketMgr->fetch($url, $bucket, $key); print_r($ret);
2.獲取bucket全部文件api
list($items, $marker, $err) = $bucketMgr->listFiles($bucket, $prefix = null, $marker = null, $limit = 1000, $delimiter = null); echo "\n====> List result: \n"; if ($err !== null) { var_dump($err); } else { echo "Marker: $marker\n"; echo 'items====>\n'; print_r($items); //echo (string)$items[10]['putTime']; //echo strtotime($items[10]['putTime']); }
3.刪除文件
安全
$err = $bucketMgr->delete($bucket, $key); if ($err !== null) { var_dump($err); } else { echo 'delete ok'; }
4.獲取單個文件信息
app
list($ret, $err) = $bucketMgr->stat($bucket, $key); echo "\n====> stat result: \n"; if ($err !== null) { var_dump($err); } else { print_r($ret); }
5.文件上傳
less
$token = $auth->uploadToken($bucket); $uploadMgr = New UploadManager(); list($ret, $err) = $uploadMgr->putFile($token, date('Y-m-d-H-i-s',time()).'.jpg', 'C:\Users\Administrator\Pictures\20150504194317.png'); echo "\n====> putFile result: \n"; if ($err !== null) { var_dump($err); } else { print_r($ret); }
puttime Epoch時間戳的轉換函數
$puttime=substr(str_replace('.', '','1.4357550505488E+16'),0,10); echo $puttime;
trim替換也能夠,暫時沒找到系統函數轉換,也能夠除10000000fetch
OR
$puttime=date('Y-m-d H:i:s',1.4357550505488E+16/10000000);
上傳策略生成:
$data['scope']='wsy100'; $data['deadline']=time()+3600; $encoded=urlsafe_base64_encode(json_encode($data)); $signature=hash_hmac('sha1',$encoded,'KEY',true); $encode_signed = urlsafe_base64_encode($signature); $UploadToken='AK:'.$encode_signed.':'.$encoded; echo $UploadToken; /* 第三步: 對json序列化後的上傳策略進行URL安全的Base64編碼,獲得以下encoded: eyJzY29wZSI6IndzeTEwMCIsImRlYWRsaW5lIjoxNDM1ODE3NzA5fQ== 第四步: 用SecretKey對編碼後的上傳策略進行HMAC-SHA1加密,而且作URL安全的Base64編碼,獲得以下的encoded_signed: Yu1NpdDvbM1NPr4IxTFsMBLxDQc= 第五步: 將 AccessKey、encode_signed 和 encoded 用 「:」 鏈接起來,獲得以下的UploadToken: */ function urlsafe_base64_encode($data) { $data = base64_encode($data); $data = str_replace(array('+','/'),array('-','_'),$data); return $data; }
寫完才知道有現成的
$token = $auth->uploadToken($bucket);
能夠用。權當練手了吧
ajax上傳預覽見:http://my.oschina.net/rain21/blog/425565#OSC_h1_1
DEMO:http://t.zy62.com/wx.php/Index/upload
API:http://developer.qiniu.com/docs/v6/api/reference/rs/stat.html
6.x版本沒有fetch獲取遠程URL資源上傳的方法,封裝了個.
七牛文檔:http://developer.qiniu.com/docs/v6/sdk/legacy-php-sdk.html
封裝好的下載地址:http://pan.baidu.com/s/1gdu95yb
在qiniu/conf.php 15行後加了:
$QINIU_FETCH_HOST='http://iovip.qbox.me';//fetch URL
rsf.php末尾增長:
/** * 從指定URL抓取資源,並將該資源存儲到指定空間中 * * @param $url 指定的URL * @param $bucket 目標資源空間 * @param $key 目標資源文件名 * * @return array[] 包含已拉取的文件信息。 * 成功時: [ * [ * "hash" => "<Hash string>", * "key" => "<Key string>" * ], * null * ] * * 失敗時: [ * null, * Qiniu/Http/Error * ] * @link http://developer.qiniu.com/docs/v6/api/reference/rs/fetch.html */ function Qiniu_Fetch($self,$url, $bucket, $key) { global $QINIU_FETCH_HOST; $resource = base64_urlSafeEncode ( $url ); $to = entry ( $bucket, $key ); $url = $QINIU_FETCH_HOST . '/fetch/' . $resource . '/to/' . $to; return Qiniu_Client_Call ( $self, $url ); } /** * 計算七牛API中的數據格式 * * @param $bucket 待操做的空間名 * @param $key 待操做的文件名 * * @return 符合七牛API規格的數據格式 * @link http://developer.qiniu.com/docs/v6/api/reference/data-formats.html */ function entry($bucket, $key) { $en = $bucket; if (! empty ( $key )) { $en = $bucket . ':' . $key; } return base64_urlSafeEncode ( $en ); } /** * 對提供的數據進行urlsafe的base64編碼。 * * @param string $data 待編碼的數據,通常爲字符串 * * @return string 編碼後的字符串 * @link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64 */ function base64_urlSafeEncode($data) { $find = array('+', '/'); $replace = array('-', '_'); return str_replace($find, $replace, base64_encode($data)); }
使用方法:
Qiniu_Fetch($client,'http://phpcto.b0.upaiyun.com/courselesson/3/2015104031642-h23061.mp4',$bucket,time().'.mp4');
獲取全部文件信息:
<?php require_once("qiniu/rs.php"); require_once("qiniu/rsf.php"); $bucket = 'wsy100'; $key = "qqConnect_Server_SDK_php_v2.0.zip"; $accessKey = ''; $secretKey = ''; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null); //echo $upToken;exit(); /* list($ret, $err) = Qiniu_RS_Stat($client, $bucket, $key); echo "Qiniu_RS_Stat result: \n"; if ($err !== null) { print_r($err); } else { $ret['putTime']=date('Y-m-d H:i:s',$ret['putTime']/10000000); print_r($ret); } */ print_r(Qiniu_RSF_ListPrefix($client,$bucket));
獲取bucket資源列表
<?php require_once './aliyun.php'; use \Aliyun\OSS\OSSClient; try { $client = OSSClient::factory(array( 'AccessKeyId' => '//Your AccessKeyId', 'AccessKeySecret' => 'Your AccessKeySecret', //在https://ak-console.aliyun.com/獲取 )); $client->createBucket(array( 'Bucket' => 'Your Bucket', )); $objectListing = $client->listObjects(array( 'Bucket' => 'Your Bucket', )); foreach ($objectListing->getObjectSummarys() as $objectSummary) { echo $objectSummary->getKey(); } } catch (\Aliyun\OSS\Exceptions\OSSException $ex) { echo "Error: " . $ex->getErrorCode() . "\n"; } catch (\Aliyun\Common\Exceptions\ClientException $ex) { echo "ClientError: " . $ex->getMessage() . "\n"; }
Fatal error: Uncaught exception 'Aliyun\OSS\Exceptions\OSSException' with message 'The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.'解決方案
緣由是PHP SDK默認使用杭州節點,而你的bucket非杭州節點,解決方案,在初始化時指定節點.
$client = OSSClient::factory(array( 'AccessKeyId' => 'Your AccessKeyId', 'AccessKeySecret' => 'Your AccessKeySecret', 'Endpoint' => 'http://oss-cn-beijing.aliyuncs.com',//北京節點 ));