七牛云存储官方接口PHP版本

PHP SDKv6

此 SDK 适用于 PHP 5.1.0 及其以上版本。基于 七牛云存储官方API 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。

SDK源码地址:https://github.com/qiniu/php-sdk/tags

应用接入

1. 获取Access Key 和 Secret Key

要接入七牛云存储,您需要拥有一对有效的 Access Key 和 Secret Key 用来进行签名认证。可以通过如下步骤获得:

  1. 开通七牛开发者帐号
  2. 登录七牛开发者自助平台,查看 Access Key 和 Secret Key 。

资源管理接口

1.查看单个文件属性信息

示例代码如下:

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);
}

2. 复制单个文件

示例代码如下:

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!";
}

3. 移动单个文件

示例代码如下:

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!";
}

4. 删除单个文件

示例代码如下:

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!";
}

上传下载接口

###1. 文件上传

为了尽可能地改善终端用户的上传体验,七牛云存储首创了客户端直传功能。一般云存储的上传流程是:

客户端(终端用户) => 业务服务器 => 云存储服务

这样多了一次上传的流程,和本地存储相比,会相对慢一些。但七牛引入了客户端直传,将整个上传过程调整为:

客户端(终端用户) => 七牛 => 业务服务器

客户端(终端用户)直接上传到七牛的服务器,通过DNS智能解析,七牛会选择到离终端用户最近的ISP服务商节点,速度会比本地存储快很多。文件上传成功以后,七牛的服务器使用回调功能,只需要将非常少的数据(比如Key)传给应用服务器,应用服务器进行保存即可。

1.1上传流程

在七牛云存储中,整个上传流程大体分为这样几步:

  1. 业务服务器颁发 uptoken(上传授权凭证)给客户端(终端用户)
  2. 客户端凭借 uptoken 上传文件到七牛
  3. 在七牛获得完整数据后,发起一个 HTTP 请求回调到业务服务器
  4. 业务服务器保存相关信息,并返回一些信息给七牛
  5. 七牛原封不动地将这些信息转发给客户端(终端用户)

需要注意的是,回调到业务服务器的过程是可选的,它取决于业务服务器颁发的 uptoken。如果没有回调,七牛会返回一些标准的信息(比如文件的 hash)给客户端。如果上传发生在业务服务器,以上流程可以自然简化为:

  1. 业务服务器生成 uptoken(不设置回调,自己回调到自己这里没有意义)
  2. 凭借 uptoken 上传文件到七牛
  3. 善后工作,比如保存相关的一些信息

服务端生成 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);
}

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

2. 文件下载

七牛云存储上的资源下载分为 公有资源下载 和 私有资源下载 。

私有(private)是 Bucket(空间)的一个属性,一个私有 Bucket 中的资源为私有资源,私有资源不可匿名下载。

新创建的空间(Bucket)缺省为私有,也可以将某个 Bucket 设为公有,公有 Bucket 中的资源为公有资源,公有资源可以匿名下载。

2.1 公有资源下载

如果在给bucket绑定了域名的话,可以通过以下地址访问。

[GET] http://<domain>/<key>

示例代码:

$key = 'pic.jpg';
$domain = 'phpsdk.qiniudn.com';
//$baseUrl 就是您要访问资源的地址
$baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);

其中可以到七牛云存储开发者自助网站绑定, 域名可以使用自己一级域名的或者是由七牛提供的二级域名(<bucket>.qiniudn.com)。注意,尖括号不是必需,代表替换项。

2.2 私有资源下载

私有资源必须通过临时下载授权凭证(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";

数据处理接口

七牛支持在云端对图像, 视频, 音频等富媒体进行个性化处理

1. 图像

1.1 查看图像属性

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粘贴到浏览器地址栏中就可以查看该图像的信息了。

1.2 查看图片EXIF信息

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";

1.3 生成图片预览

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";

贡献代码

  1. Fork
  2. 创建您的特性分支 (git checkout -b my-new-feature)
  3. 提交您的改动 (git commit -am 'Added some feature')
  4. 将您的修改记录提交到远程 git 仓库 (git push origin my-new-feature)
  5. 然后到 github 网站的该 git 远程仓库的 my-new-feature 分支下发起 Pull Request

许可证

Copyright 2013 qiniu.com

基于 MIT 协议发布:

 

 

七牛云存储提供的免费额度:

存储空间10GB

每月 PUT/DELETE 10万次请求

每月下载流量10GB

每月 GET 100万次请求

 

欢迎关注方倍工作室微信,了解我们及行业的最新动态

时间: 2024-12-03 13:24:36

七牛云存储官方接口PHP版本的相关文章

Android中使用七牛云存储进行图片上传下载的实例代码

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了. 可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端

【先锋】七牛云存储:三年磨一剑及背后核心技术解析

谈及七牛的定位,七牛云存储CTO韩拓表示当下IssS和PaaS的边界已经模糊化,客户变得更加理性,他们更加关注云存储产品带给他们的实际价值. 在这样的市场态势下,七牛以数据为自己的核心价值,并围绕数据这个主题为企业提供丰富的周边功能,如上传下载CDN加速.数据处理.分析.自定义计算平台等业务. 从2011年成立以来,七牛目前累计拥有15万企业和开发者客户,而谈到七牛的优势,他表示对业务的专注.雄厚的技术实力.独特的产品风格以及良好的服务意识是七牛成功的关键.七牛目前的100多名员工中,技术岗位占

C#实现七牛云存储

云存储,就是把本地的资源文件存放至网络上,可以公网访问.相当于网盘功能,感觉非常方便. 这里介绍的是七牛云存储.有兴趣的可以去官方网站详看 根据官网的介绍,本身是提供SDK的,下载地址,大家可以根据自己开发的应用程序,下载对应的SDK包.我下载的是C#版本,参考对应的API文档,会发现最新SDK源码和API文档不一致.是的,文档还没有及时更新 因此,我在这里重新封装一层,直接调用即可.代码如下   先定义若干属性(注册七牛用户时,由系统发放) public static string Acces

七牛云存储-java+android 实现多张图片上传至七牛云上面???

问题描述 java+android 实现多张图片上传至七牛云上面??? 新手,刚入行,最近有个需求是要实现多张图片上传,上传至七牛云存储上面,查了一些,仅仅一些概念就理不清了,求能给个具体的实例,非常感谢... 解决方案 首先得到上传接口,剩下的就是遍历图片,一个个调用接口 解决方案二: 可以和七牛云的技术支持联系下,让他们派点工程师协助你们团队开发. 解决方案三: 多线程异步上传操作,很多第三方框架的... 解决方案四: 找七牛云技术支持,网上再找下很多多图片上传demo的 解决方案五: 额,

七牛云存储的主要特点

  七牛云存储是由七牛提供的在线存储服务,通过云端接口向企业客户提供网上无限存储空间,和传统的云存储服务(如 Amazon S3)不同,七牛云存储还增加了上传下载传输加速以及富媒体云端处理特性. 七牛云存储支持绑定域名(需要备案域名),全网 CDN 加速(多数据中心+多加速节点,上传下载均加速).持续在线,可以无限扩展.用户只需按需付费,无硬件投资,并且还可以免费试用3个月. 七牛云存储的主要特点 云存储:可以存储静态文件,包含:图片,音视频,甚至是 CSS,JS,还可以存储其他文件和非结构化数

七牛云存储CEO许式伟:围绕数据服务可以展开无限想象

七牛云存储CEO许式伟在几年间接受的采访并不多,甚至在公开场合都很少看到他的身影,并不是不善言辞,而是他有着一个自己的小世界.敲开他办公室的门,有四五个技术人员正在进行封闭开发,你可以直观的感受到这和传统的CEO作风大相径庭,也可以理解他选择不抛头露面的原因是用更多的时间来潜心研究和完善产品. 想要了解许式伟还要先从创立七牛说起,七牛从云存储起家技术自然过硬,所以称得上是技术牛人.但七牛云存储CEO许式伟并没有把自定位为一个纯粹的技术人,从2000年开始许式伟成为了一个技术人员,在六年的技术生涯

七牛云存储新一代存储V2上线 价格同期下调67%

近日,国内专为开发者提供一站式数据管理服务的七牛云存储对外公布了一个令人振奋的消息.在经历了四大版本的迭代后,七牛将于6月9日正式上线其新一代存储V2.同时,七牛云存储还宣布,将同期下调其存储服务价格至此前的33%.   七牛云存储专注于为开发者提供数据安全托管,传输加速以及图片音视频处理等一站式服务,一直在存储技术领域处于领先地位,最早就在国内推出了全分布式存储架构,对数据实行多机房互备.针对互联网发展趋势下越来越多的用户产生内容,七牛云存储也首创推出了上传加速功能,这一点对于对上传速度要求很

如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型_服务器其它

十年前,Web 应用框架 Rails 创始人 David Heinemeier Hansson 曾录制视频,向我们演示如何使用 Ruby on Rails 在 15 分钟内创作一个 blog 引擎.这个视频通过 Rails 优秀的 MVC .习惯优于配置(Convention over Configuration)等设计,以及强大的代码生成.scaffold 等功能,成功展示了 Ruby on Rails 编写 Web 应用核心功能的高效简洁.Ruby on Rails 这门技术也在 Web 2

使用Plupload实现直接上传附件至七牛云存储_javascript技巧

这个插件主要针对哪些用户? 1.空间小想做下载服务器的用户,既没有足够的带宽,又没有足够大的空间,我们这个怎么弄呢?将我们的网站做成中间层,然后用户上传到服务器其实就上传到了七牛云存储,下载也是等同于在七牛下载,即省了空间又省了带宽,解决了小空间不能做下载站的可能! 2.我本身服务器很好,但是有时候用户上传只有几K的速度往上走,这个不乏有ISP的限制成64KB,但是达不到就几K,这个真实存在的,我们也用这个做上传服务器,然后用软件定时下载到服务器,这个就是现在一个网站主现在做的 3.做一个个人的