此 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万次请求
欢迎关注方倍工做室微信,了解咱们及行业的最新动态