摘要:基于七牛云存儲官方構建。使用此構建您的網絡應用程序,能讓您以非常便捷地方式將數據安全地存儲到七牛云存儲上。應用接入獲取和要接入七牛云存儲,您需要擁有一對有效的和用來進行簽名認證。文件下載七牛云存儲上的資源下載分為公有資源下載和私有資源下載。
此 SDK 適用于 PHP 5.1.0 及其以上版本。基于 七牛云存儲官方API 構建。使用此 SDK 構建您的網絡應用程序,能讓您以非常便捷地方式將數據安全地存儲到七牛云存儲上。無論您的網絡應用是一個網站程序,還是包括從云端(服務端程序)到終端(手持設備應用)的架構的服務或應用,通過七牛云存儲及其 SDK,都能讓您應用程序的終端用戶高速上傳和下載,同時也讓您的服務端更加輕盈。
應用接入
獲取Access Key 和 Secret Key
要接入七牛云存儲,您需要擁有一對有效的 Access Key 和 Secret Key 用來進行簽名認證。可以通過如下步驟獲得:
開通七牛開發者帳號
登錄七牛開發者自助平臺,查看 Access Key 和 Secret Key 。
資源管理接口
1.查看單個文件屬性信息
示例代碼如下:
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $accessKey = ""; $secretKey = " "; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); list($ret, $err) = Qiniu_RS_Stat($client, $bucket, $key); echo "Qiniu_RS_Stat result: "; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
復制單個文件
示例代碼如下:
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $key1 = "file_name1"; $accessKey = ""; $secretKey = " "; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Copy($client, $bucket, $key, $bucket, $key1); echo "====> Qiniu_RS_Copy result: "; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
移動單個文件
示例代碼如下:
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key = "pic.jpg"; $key1 = "file_name1"; $accessKey = ""; $secretKey = " "; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Move($client, $bucket, $key, $bucket, $key1); echo "====> Qiniu_RS_Move result: "; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
刪除單個文件
示例代碼如下:
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $key1 = "file_name1"; $accessKey = ""; $secretKey = " "; Qiniu_SetKeys($accessKey, $secretKey); $client = new Qiniu_MacHttpClient(null); $err = Qiniu_RS_Delete($client, $bucket, $key1); echo "====> Qiniu_RS_Delete result: "; if ($err !== null) { var_dump($err); } else { echo "Success!"; }
上傳下載接口
1. 文件上傳為了盡可能地改善終端用戶的上傳體驗,七牛云存儲首創了客戶端直傳功能。一般云存儲的上傳流程是:
客戶端(終端用戶) => 業務服務器 => 云存儲服務
這樣多了一次上傳的流程,和本地存儲相比,會相對慢一些。但七牛引入了客戶端直傳,將整個上傳過程調整為:
客戶端(終端用戶) => 七牛 => 業務服務器
客戶端(終端用戶)直接上傳到七牛的服務器,通過DNS智能解析,七牛會選擇到離終端用戶最近的ISP服務商節點,速度會比本地存儲快很多。文件上傳成功以后,七牛的服務器使用回調功能,只需要將非常少的數據(比如Key)傳給應用服務器,應用服務器進行保存即可。
1.1上傳流程
在七牛云存儲中,整個上傳流程大體分為這樣幾步:
業務服務器頒發 uptoken(上傳授權憑證)給客戶端(終端用戶)
客戶端憑借 uptoken 上傳文件到七牛
在七牛獲得完整數據后,發起一個 HTTP 請求回調到業務服務器
業務服務器保存相關信息,并返回一些信息給七牛
七牛原封不動地將這些信息轉發給客戶端(終端用戶)
需要注意的是,回調到業務服務器的過程是可選的,它取決于業務服務器頒發的 uptoken。如果沒有回調,七牛會返回一些標準的信息(比如文件的 hash)給客戶端。如果上傳發生在業務服務器,以上流程可以自然簡化為:
業務服務器生成 uptoken(不設置回調,自己回調到自己這里沒有意義)
憑借 uptoken 上傳文件到七牛
善后工作,比如保存相關的一些信息
服務端生成 uptoken 代碼如下:
require_once("qiniu/rs.php"); $bucket = "phpsdk"; $accessKey = ""; $secretKey = " "; 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 = ""; $secretKey = " "; 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: "; 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 = ""; $secretKey = " "; 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: "; if ($err !== null) { var_dump($err); } else { var_dump($ret); }
1.2 上傳策略
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 中的資源為公有資源,公有資源可以匿名下載。
2.1 公有資源下載
如果在給bucket綁定了域名的話,可以通過以下地址訪問。
[GET] http://
示例代碼:
$key = "pic.jpg"; $domain = "phpsdk.qiniudn.com"; //$baseUrl 就是您要訪問資源的地址 $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); 其中可以到七牛云存儲開發者自助網站綁定, 域名可以使用自己一級域名的或者是由七牛提供的二級域名(.qiniudn.com)。注意,尖括號不是必需,代表替換項。
2.2 私有資源下載
私有資源必須通過臨時下載授權憑證(downloadToken)下載,如下:
[GET] http://
注意,尖括號不是必需,代表替換項。
私有下載鏈接可以使用 SDK 提供的如下方法生成:
require_once("qiniu/rs.php"); $key = "pic.jpg"; $domain = "phpsdk.qiniudn.com"; $accessKey = ""; $secretKey = " "; Qiniu_SetKeys($accessKey, $secretKey); $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key); $getPolicy = new Qiniu_RS_GetPolicy(); $privateUrl = $getPolicy->MakeRequest($baseUrl, null); echo "====> getPolicy result: "; echo $privateUrl . " ";
數據處理接口
七牛支持在云端對圖像, 視頻, 音頻等富媒體進行個性化處理
圖像
1.1 查看圖像屬性
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = "pic.jpg"; $domain = "phpsdk.qiniudn.com"; $accessKey = ""; $secretKey = " "; 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: "; echo $imgInfoPrivateUrl . " ";
將$imgInfoPrivateUrl粘貼到瀏覽器地址欄中就可以查看該圖像的信息了。
1.2 查看圖片EXIF信息
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = "pic.jpg"; $domain = "phpsdk.qiniudn.com"; $accessKey = ""; $secretKey = " "; 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: "; echo $imgExifPrivateUrl . " ";
1.3 生成圖片預覽
require_once("qiniu/rs.php"); require_once("qiniu/fop.php"); $key = "pic.jpg"; $domain = "phpsdk.qiniudn.com"; $accessKey = ""; $secretKey = " "; 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: "; echo $imgViewPrivateUrl . " ";
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31941.html
摘要:,在后續測試時遇到一個詭異,當文件過大時,任務腳本上傳到七牛云失敗。當我遇到大文件無法上傳到七牛云時,斷點調試到這里,發現返回的是。后來還真被我找到了,七牛云官方提供一個腳本工具。 業務場景 需求 我們項目有一個文件上傳需求,需要從客戶端上傳到七牛云的對象存儲和自己的應用服務器上。這里使用七牛云主要是實現下載分發。應用服務器需要留一份是因為后續需要做文件分析(并且是上傳后需要立馬分析出...
摘要:原文使用七牛云存儲的一些經驗總結錯誤處理如果在與七牛的交互中出現狀態碼為的錯誤,一句話,不要猶豫,直接聯系七牛技術支持。但是筆者發現,在使用七牛云轉化后的視頻,這樣做是無效的。 近段時間將使用七牛云存儲來存放用戶上傳的數據,客戶端通過七牛的js-sdk與七牛交互,服務端C#實現了七牛相關的接口。在這過程中多多少少遇到點問題,在這里總結一下。原文:使用七牛云存儲的一些經驗總結 599錯...
摘要:版本修復提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片張,最大上傳附件,如果感覺時間不足可修改中的時間,現在是修復了文件同名上傳失敗的問題,解決方案是同名上傳覆蓋,即的方式修復了丟失的問題修改了上一版執行安全漏洞還有個小就是上傳 1.0版本修復bug 提供多文件上傳,解決了以前不能多文件上傳問題,最大上傳圖片32張,最大上傳附件10,如果感覺時間不足可修改getToke...
摘要:在中注冊發布之后,我們會產生一個監聽器,文件已經存儲在本地,獲取該文件信息將文件上傳至七牛云存入數據庫上面的部分代碼沒寫,大家可以去自己去試下,加深對七牛云及的理解,完全可以達到目的。 最近項目用戶徒增,購買的服務器還是和公司另外一個項目共用的同一臺服務器,想著要是服務器崩了,還沒個容災方案,萬一。。。不得被用戶整死 選用方案 laravel-backup 配合laravel的任務調...
閱讀 1536·2023-04-25 18:56
閱讀 1483·2021-09-29 09:34
閱讀 1709·2021-09-22 15:51
閱讀 3483·2021-09-14 18:03
閱讀 1159·2021-07-23 17:54
閱讀 2017·2019-08-29 18:38
閱讀 2899·2019-08-29 12:38
閱讀 609·2019-08-26 13:41