摘要:基于七牛云存储官方构建。使用此构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。应用接入获取和要接入七牛云存储,您需要拥有一对有效的和用来进行签名认证。文件下载七牛云存储上的资源下载分为公有资源下载和私有资源下载。
此 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 . " ";
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31941.html
摘要:,在后续测试时遇到一个诡异,当文件过大时,任务脚本上传到七牛云失败。当我遇到大文件无法上传到七牛云时,断点调试到这里,发现返回的是。后来还真被我找到了,七牛云官方提供一个脚本工具。 业务场景 需求 我们项目有一个文件上传需求,需要从客户端上传到七牛云的对象存储和自己的应用服务器上。这里使用七牛云主要是实现下载分发。应用服务器需要留一份是因为后续需要做文件分析(并且是上传后需要立马分析出...
摘要:原文使用七牛云存储的一些经验总结错误处理如果在与七牛的交互中出现状态码为的错误,一句话,不要犹豫,直接联系七牛技术支持。但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。 近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文:使用七牛云存储的一些经验总结 599错...
摘要:版本修复提供多文件上传,解决了以前不能多文件上传问题,最大上传图片张,最大上传附件,如果感觉时间不足可修改中的时间,现在是修复了文件同名上传失败的问题,解决方案是同名上传覆盖,即的方式修复了丢失的问题修改了上一版执行安全漏洞还有个小就是上传 1.0版本修复bug 提供多文件上传,解决了以前不能多文件上传问题,最大上传图片32张,最大上传附件10,如果感觉时间不足可修改getToke...
摘要:在中注册发布之后,我们会产生一个监听器,文件已经存储在本地,获取该文件信息将文件上传至七牛云存入数据库上面的部分代码没写,大家可以去自己去试下,加深对七牛云及的理解,完全可以达到目的。 最近项目用户徒增,购买的服务器还是和公司另外一个项目共用的同一台服务器,想着要是服务器崩了,还没个容灾方案,万一。。。不得被用户整死 选用方案 laravel-backup 配合laravel的任务调...
阅读 1516·2023-04-25 18:56
阅读 1460·2021-09-29 09:34
阅读 1692·2021-09-22 15:51
阅读 3465·2021-09-14 18:03
阅读 1140·2021-07-23 17:54
阅读 1996·2019-08-29 18:38
阅读 2885·2019-08-29 12:38
阅读 594·2019-08-26 13:41