此 SDK 適用於 PHP 5.1.0 及其以上版本。基於 七牛雲存儲官方API 構建。使用此 SDK 構建您的網絡應用程序,能讓您以很是便捷地方式將數據安全地存儲到七牛雲存儲上。不管您的網絡應用是一個網站程序,仍是包括從雲端(服務端程序)到終端(手持設備應用)的架構的服務或應用,經過七牛雲存儲及其 SDK,都能讓您應用程序的終端用戶高速上傳和下載,同時也讓您的服務端更加輕盈。php
SDK源碼地址:https://github.com/qiniu/php-sdk/tagshtml
要接入七牛雲存儲,您須要擁有一對有效的 Access Key 和 Secret Key 用來進行簽名認證。能夠經過以下步驟得到:git
示例代碼以下:github
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); list($ret, $err) = Qiniu_RS_Stat($client, $bucket, $key); echo "Qiniu_RS_Stat result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
示例代碼以下:api
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $key1 = "file_name1"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Copy($client, $bucket, $key, $bucket, $key1); echo "====> Qiniu_RS_Copy result: \n"; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
示例代碼以下:瀏覽器
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $key1 = "file_name1"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Move($client, $bucket, $key, $bucket, $key1); echo "====> Qiniu_RS_Move result: \n"; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
示例代碼以下:七牛雲存儲
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key1 = "file_name1"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Delete($client, $bucket, $key1); echo "====> Qiniu_RS_Delete result: \n"; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
爲了儘量地改善終端用戶的上傳體驗,七牛雲存儲獨創了客戶端直傳功能。通常雲存儲的上傳流程是:ruby
客戶端(終端用戶) => 業務服務器 => 雲存儲服務
這樣多了一次上傳的流程,和本地存儲相比,會相對慢一些。但七牛引入了客戶端直傳,將整個上傳過程調整爲:服務器
客戶端(終端用戶) => 七牛 => 業務服務器
客戶端(終端用戶)直接上傳到七牛的服務器,經過DNS智能解析,七牛會選擇到離終端用戶最近的ISP服務商節點,速度會比本地存儲快不少。文件上傳成功之後,七牛的服務器使用回調功能,只須要將很是少的數據(好比Key)傳給應用服務器,應用服務器進行保存便可。
在七牛雲存儲中,整個上傳流程大致分爲這樣幾步:
須要注意的是,回調到業務服務器的過程是可選的,它取決於業務服務器頒發的 uptoken。若是沒有回調,七牛會返回一些標準的信息(好比文件的 hash)給客戶端。若是上傳發生在業務服務器,以上流程能夠天然簡化爲:
服務端生成 uptoken 代碼以下:
require_once("qiniu/rs.php"); $bucket = 'phpsdk'; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null);
上傳文件到七牛(一般是客戶端完成,但也能夠發生在服務端):
上傳字符串
require_once("qiniu/io.php"); require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key1 = "file_name1"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null); list($ret, $err) = Qiniu_Put($upToken, $key1, "Qiniu Storage!", null); echo "====> Qiniu_Put result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
上傳本地文件
require_once("qiniu/io.php"); require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key1 = "file_name1"; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $putPolicy = new Qiniu_RS_PutPolicy($bucket); $upToken = $putPolicy->Token(null); $putExtra = new Qiniu_PutExtra(); $putExtra->Crc32 = 1; list($ret, $err) = Qiniu_PutFile($upToken, $key1, __file__, $putExtra); echo "====> Qiniu_PutFile result: \n"; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
uptoken 其實是用 AccessKey/SecretKey 進行數字簽名的上傳策略(Qiniu_RS_PutPolicy
),它控制則整個上傳流程的行爲。讓咱們快速過一遍你都可以決策啥:
class Qiniu_RS_PutPolicy { public $Scope; // 必選項。能夠是 bucketName 或者 bucketName:key public $CallbackUrl; // 可選 public $CallbackBody; // 可選 public $ReturnUrl; // 可選, 更貼切的名字是 redirectUrl。 public $ReturnBody; // 可選 public $AsyncOps; // 可選 public $EndUser; // 可選 public $Expires; // 可選。默認是 3600 秒 }
scope
限定客戶端的權限。若是 scope
是 bucket,則客戶端只能新增文件到指定的 bucket,不能修改文件。若是 scope
爲 bucket:key,則客戶端能夠修改指定的文件。callbackUrl
設定業務服務器的回調地址,這樣業務服務器才能感知到上傳行爲的發生。callbackBody
設定業務服務器的回調信息。文件上傳成功後,七牛向業務服務器的callbackUrl發送的POST請求攜帶的數據。支持 魔法變量 和 自定義變量。returnUrl
設置用於瀏覽器端文件上傳成功後,瀏覽器執行301跳轉的URL,通常爲 HTML Form 上傳時使用。文件上傳成功後瀏覽器會自動跳轉到 returnUrl?upload_ret=returnBody
。returnBody
可調整返回給客戶端的數據包,支持 魔法變量 和 自定義變量。returnBody
只在沒有 callbackUrl
時有效(不然直接返回 callbackUrl
返回的結果)。不一樣情形下默認返回的 returnBody
並不相同。在通常狀況下返回的是文件內容的 hash
,也就是下載該文件時的 etag
;但指定 returnUrl
時默認的 returnBody
會帶上更多的信息。asyncOps
可指定上傳完成後,須要自動執行哪些數據處理。這是由於有些數據處理操做(好比音視頻轉碼)比較慢,若是不進行預轉可能第一次訪問的時候效果不理想,預轉能夠很大程度改善這一點。關於上傳策略更完整的說明,請參考 uptoken。
七牛雲存儲上的資源下載分爲 公有資源下載 和 私有資源下載 。
私有(private)是 Bucket(空間)的一個屬性,一個私有 Bucket 中的資源爲私有資源,私有資源不可匿名下載。
新建立的空間(Bucket)缺省爲私有,也能夠將某個 Bucket 設爲公有,公有 Bucket 中的資源爲公有資源,公有資源能夠匿名下載。
若是在給bucket綁定了域名的話,能夠經過如下地址訪問。
[GET] http://<domain>/<key>
示例代碼:
$key = 'pic.jpg'; $domain = 'phpsdk.qiniudn.com'; //$baseUrl 就是您要訪問資源的地址 $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);
其中能夠到七牛雲存儲開發者自助網站綁定, 域名可使用本身一級域名的或者是由七牛提供的二級域名(<bucket>.qiniudn.com
)。注意,尖括號不是必需,表明替換項。
私有資源必須經過臨時下載受權憑證(downloadToken)下載,以下:
[GET] http://<domain>/<key>?e=<deadline>&token=<downloadToken>
注意,尖括號不是必需,表明替換項。
私有下載連接可使用 SDK 提供的以下方法生成:
require_once("qiniu/rs.php"); $key = 'pic.jpg'; $domain = 'phpsdk.qiniudn.com'; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); $getPolicy = new Qiniu_RS_GetPolicy(); $privateUrl = $getPolicy->MakeRequest($baseUrl, null); echo "====> getPolicy result: \n"; echo $privateUrl . "\n";
七牛支持在雲端對圖像, 視頻, 音頻等富媒體進行個性化處理
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = 'pic.jpg'; $domain = 'phpsdk.qiniudn.com'; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); //生成baseUrl $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); //生成fopUrl $imgInfo = new Qiniu_ImageInfo; $imgInfoUrl = $imgInfo->MakeRequest($baseUrl); //對fopUrl 進行簽名,生成privateUrl。 公有bucket 此步能夠省去。 $getPolicy = new Qiniu_RS_GetPolicy(); $imgInfoPrivateUrl = $getPolicy->MakeRequest($imgInfoUrl, null); echo "====> imageInfo privateUrl: \n"; echo $imgInfoPrivateUrl . "\n";
將$imgInfoPrivateUrl
粘貼到瀏覽器地址欄中就能夠查看該圖像的信息了。
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = 'pic.jpg'; $domain = 'phpsdk.qiniudn.com'; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); //生成baseUrl $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); //生成fopUrl $imgExif = new Qiniu_Exif; $imgExifUrl = $imgExif->MakeRequest($baseUrl); //對fopUrl 進行簽名,生成privateUrl。 公有bucket 此步能夠省去。 $getPolicy = new Qiniu_RS_GetPolicy(); $imgExifPrivateUrl = $getPolicy->MakeRequest($imgExifUrl, null); echo "====> imageView privateUrl: \n"; echo $imgExifPrivateUrl . "\n";
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = 'pic.jpg'; $domain = 'phpsdk.qiniudn.com'; $accessKey = '<YOUR_APP_ACCESS_KEY>'; $secretKey = '<YOUR_APP_SECRET_KEY>'; Qiniu_SetKeys($accessKey, $secretKey); //生成baseUrl $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); //生成fopUrl $imgView = new Qiniu_ImageView; $imgView->Mode = 1; $imgView->Width = 60; $imgView->Height = 120; $imgViewUrl = $imgView->MakeRequest($baseUrl); //對fopUrl 進行簽名,生成privateUrl。 公有bucket 此步能夠省去。 $getPolicy = new Qiniu_RS_GetPolicy(); $imgViewPrivateUrl = $getPolicy->MakeRequest($imgViewUrl, null); echo "====> imageView privateUrl: \n"; echo $imgViewPrivateUrl . "\n";
git checkout -b my-new-feature
)git commit -am 'Added some feature'
)git
倉庫 (git push origin my-new-feature
)git
遠程倉庫的 my-new-feature
分支下發起 Pull RequestCopyright © 2013 qiniu.com
基於 MIT 協議發佈:
七牛雲存儲提供的免費額度:
存儲空間10GB
每個月 PUT/DELETE 10萬次請求
每個月下載流量10GB
每個月 GET 100萬次請求
歡迎關注方倍工做室微信,瞭解咱們及行業的最新動態