七牛云–开发笔记

支出文档:https://developer.qiniu.com/kodo/sdk/1241/php

同一、下充斥官方SDK :

 https://github.com/qiniu/php-sdk/releases?ref=developer.qiniu.com

下载源代码包后,解压到您的档次遭到。
然后每当公的种类受到引入 autoloader:

 

主导采用办法

安好 SDK 后,接下介绍如何使用 SDK。在动 SDK
之前,需要注册一个拐牛帐号,并报到控制台获取一针对性中之AccessKey和SecretKey,并且详细阅读[安然体制][securityHref]以更了解如何是用及管制密钥。

 

引入SDK

凭你是通过哪种艺术安装的
SDK,只待同句简单的 require 语句以设置好之SDK包含到公的类型受到。请参见如下表,找到适合您的安装方式,将SDK引入到公的花色蒙。请用而色面临的骨子里路径替换 path_to_sdk。

安装方式 引入SDK
Composer 安装 require ‘path_to_sdk/vendor/autoload.php’;
下载Composer安装包 require ‘path_to_sdk/vendor/autoload.php’;
下载源码安装包 require ‘path_to_sdk/autoload.php’;

 

SDK结构

足一直翻我们的SDK目录,即可大致了解我们SDK的构造。

  • 极外层包含:配置文件, 鉴权和局部共用的函数。
  • HTTP 目录主要涵盖了有些对 http 进行包装的切近,这块你得无用关爱。
  • Storage 目录主要包含两不行块:Bucket 中文件的军事管制和文件之上传。
  • Processing
    目录主要包含文件的拍卖,文件处理又噙两只面:同步处理以及异步处理。

为了帮助您再次好的问询与以我们的sdk,我们尚提供了各种使用示例。
如果运用着遇到题目,可以通过Github抑或我们的工单开展反映。下面我们本着一部分要点展开简单的介绍,方便你快入门。

 

鉴权类

当动用七牛的SDK的历程中鉴权是怪关键之一模一样块,不管是达到传鉴权,下充斥签权,
还是回调的签权。 PHP SDK 中之 Auth 类封装了富有的鉴权方式。 所以在使用
PHP SDK 时基本都见面预先对鉴权类进行初始化:

拷贝

  1. <?php

  2. require ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5.  

  6. // 用于签名的公钥和私钥

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. // 初始化签权对象

  11. $auth = new Auth($accessKey,
    $secretKey);

初始化好Auth 类后,就可以调用相应的计了,比如生成私有下充斥链接方法
privateDownloadUrl,获取上传Token方法 uploadToken,验证回调方法
verifyCallback等。

 

上传类

每当高达传类 UploadManager 中要担负文件之上传,
七牛的文本上传分为有限栽及污染方法:表单上传和分片上污染。当然在PHP
SDK中而不要关心是细节,只待调用 UploadManager 中的上传方法即可。UploadManager
中之齐传方法会根据上传文件之分寸选择不同的上传方式,小于4MB的展开表单上污染,大于4MB之拓展分片上传。
以下一个简单易行的演示使您重新清晰地打听怎么开始上传对象:

拷贝

  1. <?php

  2. require ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\UploadManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9. $auth = new Auth($accessKey,
    $secretKey);

  10.  

  11. // 空间名
    https://developer.qiniu.io/kodo/manual/concepts

  12. $bucket = ‘Bucket_Name’;

  13.  

  14. // 生成达标传Token

  15. $token = $auth->uploadToken($bucket);

  16.  

  17. // 构建 UploadManager 对象

  18. $uploadMgr = new UploadManager();

空中名请参阅空间。

 

资源管理类

以资源管理类 BucketManager 中关键担负空间中文件的军事管制:
复制,移动,删除,获取元信息,修改Mime,拉取文件及七牛空间,列取文件。
以下一个简的以身作则使你还清楚地了解哪些开始空间管理对象:

拷贝

  1. <?php

  2. require ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. //初始化Auth状态

  11. $auth = new Auth($accessKey,
    $secretKey);

  12.  

  13. //初始化BucketManager

  14. $bucketMgr = new
    BucketManager($auth);

 

接触持久化类

点持久化类 PersistentFop 中主要担负对空间受到既上传的文件进行异步处理,并针对异步处理的结果开展持久化操作。比如针对已经上传的视频文件进行转码,拼接,切片,水印等处理,并将拍卖后的结果保存于空间受到。

拷贝

  1. <?php

  2.  

  3. require_once __DIR__ . ‘/../autoload.php’;

  4.  

  5. use Qiniu\Auth;

  6. use Qiniu\Processing\PersistentFop;

  7.  

  8. $accessKey = ‘Access_Key’;

  9. $secretKey = ‘Secret_Key’;

  10. $auth = new Auth($accessKey,
    $secretKey);

  11.  

  12. // 要转码的文本所在的长空

  13. $bucket = ‘Bucket_Name’;

  14.  

  15. // 转码时采用的队名称

  16. $pipeline = ‘abc’;

  17.  

  18. // 初始化

  19. $pfop = new PersistentFop($auth, $bucket,
    $pipeline);

 

场景化示例

连片下去我们,对一部分广泛的采取状况,提供部分简易的Demo,使你再次快速的连七牛。

 

Hello, World!

每当询问了基本概念和编程模型晚,我们现在以无比缺的篇幅将率先独道存储服务的演示程序走起。该示例的对象是:将一个本土小文件及传指定的贮存空间中。

交付页面

咱事先勾勒一个粗略的 HTML
表单来供用户上传到七牛存储空间信息并选择一个地方文件。在点击提交按钮后,浏览器会发送一个
HTTP 请求到七牛上传域名实施文书上污染动作。

拷贝

  1. <form method=”post” action=”http://up.qiniu.com” enctype=”multipart/form-data”>

  2. <input name=”token” type=”hidden” value=”<upload_token>”>

  3. <input name=”file” type=”file”
    />

  4. <input type=”submit” value=”上传”/>

  5. </form>

上传动作

也许你注意到了之上传表单出一个token字段,所以想只要运用 form
直传七牛一个文书,必须于页面加载的早晚,向服务端请求token连安装到这表单项中。服务端生成这个token涉嫌到我们
SDK 中提供的不二法门:Qiniu\Auth

重点代码如下所示:

拷贝

  1. use Qiniu\Auth;

  2.  

  3. $bucket = ‘<your_bucket>’;

  4. $accessKey = ‘<your_access_key>’;

  5. $secretKey = ‘<your_secret_key>’;

  6. $auth = new Auth($accessKey,
    $secretKey);

  7.  

  8. $upToken = $auth->uploadToken($bucket);

  9.  

  10. echo $upToken;

足见见,以上代码主要做了以下几步工作:

  1. 动用你的 AccessKey 及 SecretKey 用于初始化Auth对象
  2. 调用初始化的对象Auth目标的主意uploadToken来生成达标传token

到这边结束,第一个示范就得运作起来了。您可查阅该示例的在线演示。您为堪直接得到与查该示例的源代码。

小结

这示例仅用于演示如何运用 PHP SDK
快速运转第一独操存储服务之先后。本事例尽可能简单的见七牛之表单上污染,因此要大家只是将本示例作为上
PHP SDK 的一个步骤,而非是于产品环境面临利用。

 

一个整的移位采用

咱俩以详细介绍如何用 PHP SDK
与其余端配合构建一个接近于微信朋友围的位移使用。

以斯活动采用里终端用户可开展如下操作:

  1. 动用预设的帐号密码登录(不支持注册新帐号)
  2. 查自己跟对象分享的影及描述(不支持评论)
  3. 及污染一模一样布置新图,并补充加相同截描述。

Demo截图

圆架构

于此类应用,我们引进的完整架构使下图所示:

图片 1

对于这架构起以下重点要:

  1. AK/SK 只能以事情服务器端使用,如果以 AK 和 SK
    同时保留或者传输至运动端会时有发生重的信泄露风险。
  2. AK/SK
    是商店帐号信息,业务服务器需要发友好之帐号数据库,对承诺到各个一个终端用户之帐号信息。
  3. 是因为不同的事务都急需寄放有跟文件有关的叙述信息,且图片以属不同之极用户,因此用保障文件管理表,以管理文件的描述信息以及所有者关系。

依据上述这些主要要,我们来统筹及贯彻我们的 PHP 版本的事情服务器。

接口设计

咱俩来大概的计划性我们的政工服务器接口。

帐号验证:

拷贝

  1. POST /login.php
    HTTP/1.1

  2. HOST: demos.qiniu.io

  3. Accept: */*

  4. Content-Type:
    application/x-www-form-urlencoded

  5.  

  6.  

  7. uname=<username>&pwd=<password>

  8.  

取文件列表:

拷贝

  1. POST /files.php
    HTTP/1.1

  2. HOST: demos.qiniu.io

  3. Accept: */*

  4. Cookie: <cookie>

  5. Content-Type:
    application/x-www-form-urlencoded

抱上传授权,因为移动端并不知道 AK/SK
信息,客户端在需要上污染文书时犹待为工作服务器发起一个落上传授权的乞求:

拷贝

  1. POST /uptoken.php HTTP/1.1

  2. HOST: demos.qiniu.io

  3. Accept: */*

  4. Cookie: <cookie>

  5. Content-Type:
    application/x-www-form-urlencoded

回调,移动端会直接上传文书及提存储服务,因此业务服务器不欲提供上传接口,但是需要提供一个供云存储服务以接收到文件后的回调接口。回调接口的应内容会出于叙存储服务返回给移动端:

拷贝

  1. POST /callback.php HTTP/1.1

  2. HOST: demos.qiniu.io

  3. Accept: */*

  4. Cookie: <cookie>

  5. Content-Type:
    application/x-www-form-urlencoded

  6.  

  7. uid=<uid>&fname=<file_name>&fkey=<file_key>&desc=<description>

  8.  

数据表,业务服务要一个事务数据库的支撑为管理涉及的帐号信息和文书信息。在本示例被我们选用
MySQL 来搭建工作数据库。帐号表:

字段名 字段类型 字段说明
id int 唯一标识。
uid int 唯一用户标识。
uname char(128) 用户名,格式为邮箱如 admin@example.com 。
password char(128) 加密后的密码。
status int 1: active 
0: disabled

文本信息表:

字段名 字段类型 字段说明
id int 唯一标识。
uid int 用户唯一标识。
fname char(512) 文件的显示名
key char(512) 文件对应到云存储服务中的唯一标识。
createTime time 上传时间。
description char(2048) 文件的描述内容。

相应的 SQL 语句如下:

拷贝

  1. create database qspace;

  2.  

  3. CREATE TABLE
    users (

  4. uid INT NOT
    NULL
    AUTO_INCREMENT,

  5. uname VARCHAR(128) NOT NULL,

  6. password VARCHAR(128) NOT NULL,

  7. status INT,

  1. PRIMARY KEY (uid)

  2. );

  3.  

  4. CREATE TABLE
    files_info (

  5. id INT NOT NULL
    AUTO_INCREMENT,

  6. uid INT NOT
    NULL,

  7. fname VARCHAR(512) NOT NULL,

  8. fkey VARCHAR(512) NOT NULL,

  9. createTime INT,

  10. description VARCHAR(1024),

  11. PRIMARY KEY (id),

  12. FOREIGN KEY (uid) REFERENCES users(uid),

  13. UNIQUE INDEX
    (id)

  14. );

劳实现

连片下我们一步步底落实以上定义的接口。这些实现重大考虑流程的完整性,因此当安全性上尚无开充分的勘察,请不要一直用被产品环境面临。

安排文件

咱们用在一个地方存放全局的安。本示例被我们直接用一个 config.php
文件包含多全局变量的方法来化解之题目。

拷贝

  1. <?php

  2. class Config

  3. {

  4. const DB_NAME = ‘qspace’,

  5. DB_USER = ‘root’,

  6. DB_PWD = ‘****’,

  7. DB_HOST = ‘<your_db_host>’,

  8. ACCESS_KEY = ‘<your_access_key>’,

  9. SECRET_KEY = ‘<your_secret_key>’,

  10. BUCKET_NAME = ‘<your_bucket_name>’;

  11. }

帐号验证

帐号验证的逻辑非常简单,就是用呼吁中包含的用户信息及数据库表中的信息进行比对,因此无待涉及
SDK 的功效。

拷贝

  1. <?php

  2. require_once ‘db.php’;

  3.  

  4. session_start();

  5.  

  6. if(!isset($_POST[‘uname’]) && !isset($_POST[‘pwd’]))

  7. {

  8. http_response_code(401);

  9. $resp = array(‘status’ => ‘failed’, ‘msg’ =>
    ‘please input username &
    password!’);

  10. echo json_encode($resp);

  11. return;

  12. }

  13.  

  14. $uname = $_POST[‘uname’];

  15. $_pwd = $_POST[‘pwd’];

  16.  

  17. $salt = ‘Qiniu’ . $uname;

  18. $pwd = crypt($_pwd, $salt);

  19.  

  20. $stmt = $DB->prepare(‘select * from
    users where uname = :name’);

  21. $stmt->execute(array(‘name’ => $uname));

  22.  

  23. $user = $stmt->fetch();

  24.  

  25. if ($user[‘password’] !== $pwd)

  26. {

  27. http_response_code(401);

  28. $resp = array(‘status’ => ‘failed’, ‘msg’ =>
    ‘incorrect username or
    password!’);

  29. echo json_encode($resp);

  30. return;

  31. }

  32.  

  33. $_SESSION[‘uid’] = $user[‘uid’];

  34. $_SESSION[‘uname’] = $uname;

  35.  

  36. $resp = array(‘status’ => ‘ok’,
    ‘uname’ =>
    $uname);

  37. echo json_encode($resp);

获取文件列表

以及帐号验证功能雷同,获取文件列表也不过是查询数据库,因此不多做解释。

拷贝

  1. <?php

  2. require_once ‘db.php’;

  3.  

  4. session_start();

  5.  

  6. $uid = $_SESSION[‘uid’];

  7. if(!isset($uid))

  8. {

  9. header(‘location: login.php’);

  10. return;

  11. }

  12.  

  13. $stmt = $DB->prepare(‘select * from
    files_info where uid = :uid’);

  14. $stmt->execute(array(‘uid’ => $uid));

  15.  

  16. $files = $stmt->fetchAll();

  17.  

  18. echo json_encode($files);

抱上传授权

客户端在急需高达污染文书时还需要先向工作服务器发起一个得到上传授权的恳求。
SDK
中的 Qiniu\Auth 类提供了 uploadToken($bucket, ...) 方法,可以挺便宜的浮动对应之上传授权。

拷贝

  1. <?php

  2. require_once ‘vendor/autoload.php’;

  3. require_once ‘db.php’;

  4. require_once ‘config.php’;

  5.  

  6. use Qiniu\Auth;

  7.  

  8. session_start();

  9. $uid = $_SESSION[‘uid’];

  10. if(!isset($uid))

  11. {

  12. header(‘location: login.php’);

  13. return;

  14. }

  15.  

  16. $bucket = Config::BUCKET_NAME;

  17. $accessKey = Config::ACCESS_KEY;

  18. $secretKey = Config::SECRET_KEY;

  19. $auth = new Auth($accessKey,
    $secretKey);

  20.  

  21. $policy = array(

  22. ‘callbackUrl’ => ‘http://172.30.251.210/callback.php’,

  23. ‘callbackBody’ => ‘{“fname”:”$(fname)”, “fkey”:”$(key)”,
    “desc”:”$(x:desc)”, “uid”:’ . $uid . ‘}’

  24. );

  25.  

  26. $upToken = $auth->uploadToken($bucket, null, 3600,
    $policy);

  27.  

  28. header(‘Access-Control-Allow-Origin:*’);

  29. echo $upToken;

回调

当吸收回调时,通常表示一个文本已经成功上传。回调会包含该公文所对应的讲述信息。因此业务服务器在接收回调后,需要以相应的文件信息写副到文件信息表中。

拷贝

  1. <?php

  2. require_once ‘db.php’;

  3.  

  4. $_body = file_get_contents(‘php://input’);

  5. $body = json_decode($_body, true);

  6.  

  7. $uid = $body[‘uid’];

  8. $fname = $body[‘fname’];

  9. $fkey = $body[‘fkey’];

  10. $desc = $body[‘desc’];

  11.  

  12. $date = new DateTime();

  13. $ctime = $date->getTimestamp();

  14.  

  15. $stmt = $DB->prepare(‘INSERT INTO
    files_info (uid, fname, fkey, createTime, description) VALUES
    (:uid, :fname, :fkey, :ctime, :desc);’);

  16. $ok = $stmt->execute(array(‘uid’ => $uid, ‘fname’ => $fname, ‘fkey’ => $fkey, ‘ctime’ => $ctime, ‘desc’ =>
    $desc));

  17.  

  18. header(‘Content-Type:
    application/json’);

  19. if (!$ok)

  20. {

  21. $resp = $DB->errorInfo();

  22. http_response_code(500);

  23. echo json_encode($resp);

  24. return;

  25. }

  26.  

  27. $resp = array(‘ret’ => ‘success’);

  28. echo json_encode($resp);

劳监督

为了确认劳动之正常化运行,我们还实现了一个粗略的监控页面以查看有上传的图片。该页面假设admin的组织者才发出且访问。后端代码就是用用户上传的文书从数据库被列取出来。

拷贝

  1. <?php

  2. require_once ‘vendor/autoload.php’;

  3. require_once ‘db.php’;

  4.  

  5. if (!$_SESSION[‘logged’])

  6. {

  7. header(‘login.php’);

  8. }

  9.  

  10. $id = $_POST[‘id’];

  11. if ($id)

  12. {

  13. $stmt = $DB->prepare(‘delete from
    files_info where id = :id’);

  14. $stmt->execute(array(‘id’ => $id));

  15. }

  16.  

  17. $stmt = $DB->prepare(‘select * from
    files_info’);

  18. $stmt->execute();

  19. $files = $stmt->fetchAll();

  20.  

  21. $smarty = new Smarty();

  22. $smarty->assign(‘files’,
    $files);

  23.  

  24. $smarty->display(‘file_mgr.tpl’);

前端页面下 Bootstrap 的控件实现,并下 Smarty 模板技术来循环生成最终页面:

拷贝

  1. {foreach from=$files item=file}

  2. <tr>

  3. <td><a href=”{$file[uid]}”>{$file[“uid”]}</a></td>

  4. <td>{$file[“fname”]}</td>

  5. <td>{$file[“fkey”]}</td>

  6. <td>{$file[“description”]}</td>

  7. <td>{$file[“createTime”]}</td>

  8. <td><a class=”del” href=”” data-fid=”{$file[‘id’]}”>删除</a></td>

  9. </tr>

  10. {/foreach}

走端实现

本示例包含一个 Android 客户端的兑现。因为据文档的核心是结合例子讲解 PHP
SDK 的应用,因此此就未详细讲解如何贯彻 Android
客户端了。您可以下载和安移动客户端的安装包,或查看移动客户端的源代码。

小结

您得于 Android
手机或者模拟器上安及运作本示例的移位端采用,上污染一模一样布置图片,并查阅图片列表和描述。这个示例的重要性在于讲解一个推荐的成品架构,以及各个分支系如何协同工作。

连通下我们重新回环几单示范遍历七牛云提供的任何强大力量。接下来的言传身教都无见面重譬如这个示例一样提供一个总体的动互联网产品架构,而是把要放在功能介绍及。您可以举一反三,快速的当本章介绍的演示上进行改动及加强,就足以快支付有各种诙谐之运动互联网使用。移动端安装包,或查看移动客户端的源代码,admin管理界面。

 

图表处理

咱用圈一个效果相对齐全的言传身教来讲学图片处理的重中之重为此法,并顺便介绍 PHP
SDK 的资源管理效果。

是示例用户可以上传图片,选择图片处理模式,输入相应的处理参数,然后可以查处理的结果。用户还足以点选不同之图样为显示图片的鉴黄信息与辨认广告之音讯,
以及取得图片的主干信息,平均色,exif信息等。

下面我们分步来兑现这示例。前端实现采用了Bootstrap及我们的js-sdk,后端使用
phpsdk 生成上传的 token 。

转上传token

率先安装我们的 phpsdk,然后引入相应文件并调用接口生成上传token:

拷贝

  1. require_once ‘vendor/autoload.php’;

  2. require_once ‘config.php’;

  3.  

  4. use Qiniu\Auth;

  5.  

  6. $bucket = Config::BUCKET_NAME;

  7. $accessKey = Config::ACCESS_KEY;

  8. $secretKey = Config::SECRET_KEY;

  9.  

  10. $auth = new Auth($accessKey,
    $secretKey);

  11. $upToken = $auth->uploadToken($bucket);

  12.  

  13. $ret = array(‘uptoken’ => $upToken);

  14.  

  15. echo json_encode($ret);

上传部分连锁的 html 代码:

拷贝

  1. <div id=”container”>

  2. <button id=”pickfiles” class=”btn btn-primary
    btn-lg btn-block” type=”submit”>上传图片</button>

  3. </div>

上传对应之调用 jssdk 相关代码:

拷贝

  1. var uploader = Qiniu.uploader({

  2. runtimes: ‘html5,flash,html4’, //上传模式,依次退化

  3. browse_button: ‘pickfiles’, //上传选择的点选按钮,**必需**

  4. uptoken_url: ‘uptoken.php’, //Ajax请求upToken的Url,**强烈建议设置**(服务端提供)

  5. domain: ‘http://rwxf.qiniudn.com/’, //bucket
    域名,下载资源时用到,**必需**

  6. container: ‘container’, //上污染区域DOM
    ID,默认是browser_button的父元素,

  7. max_file_size: ‘100mb’, //最老文件体积限制

  8. flash_swf_url: ‘plupload/Moxie.swf’,
    //引入flash,相对路径

  9. max_retries: 3, //上传失败最酷重试次数

  10. dragdrop: true, //开启可牵引上污染

  11. drop_element: ‘container’, //拖曳上传区域元素的ID,拖曳文件要文件夹后而点发上污染

  12. chunk_size: ‘4mb’, //分片上传时,每片的体积

  13. auto_start: true, //选择文件后自动上传,若关闭需要好绑定事件触发上传

  14. init: {

  15. ‘UploadProgress’: function(up, file) {

  16. $(‘#pickfiles’).prop(‘disabled’, true).html(‘图片及污染中…’);

  17. },

  18. ‘FileUploaded’: function(up, file, info) {

  19.  

  20. $(‘#pickfiles’).prop(‘disabled’, false).html(‘上传图片’);

  21. var res = JSON.parse(info);

  22. imgUrl = up.getOption(‘domain’) +
    res.key;

  23. refresh(imgUrl);

  24. },

  25. ‘Error’: function(up, err,
    errTip) {

  26. $(‘#pickfiles’).prop(‘disabled’, false).html(‘上传图片’);

  27. }

  28. }

  29. });

图表处理

图处理的进程非常简单,就是用我们的图样处理 fop 以及相应的参数拼接在图地址后即可。基本无需用到
SDK 的效用,当然你吧得采用我们的 jssdk 进行图纸地址与拍卖参数的拼凑。
比如一个图形:http://qiniuphotos.qiniudn.com/gogopher.jpg,现在我们针对斯图形展开200×200之相当于较缩放,然后还进行在中剪裁,可以使imageView2的模式1,最终获得的图:http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200。

再也多处理原则请参见图中心处理
(imageView2)文档。

图形信息

  • 图片中心信息,只待以图外链后面拼接上 ?imageInfo ,http://qiniuphotos.qiniudn.com/gogopher.jpg?imageInfo:

拷贝

  1. {

  2. format: “jpeg”,

  3. width: 640,

  4. height: 427,

  5. colorModel: “ycbcr”,

  6. orientation: “Top-left”

  7. }

  8. 图平均色,只待以图纸的外链后面拼接上 ?imageAve ,http://qiniuphotos.qiniudn.com/gogopher.jpg?imageAve:

拷贝

  1. {

  2. RGB: “0x85694d”

  3. }

  4. 图片 Exif
    信息,只待以图片的外链后面拼接上 ?exif,http://qiniuphotos.qiniudn.com/gogopher.jpg?exif:

拷贝

  1. {

  2. ApertureValue: {

  3. val: “5.00 EV (f/5.7)”,

  4. type: 5

  5. },

  6. ColorSpace: {

  7. val: “sRGB”,

  8. type: 3

  9. },

  10. ComponentsConfiguration: {

  11. val: “- – –
    -“,

  12. type: 7

  13. },

  14. }

于定义数据处理效果

除却我们官方提供的强大图片处理功能外,我们的自定义数据处理平台尚提供了精锐的老三在数处理服务。在本例中我们尽管来品尝一下图鉴黄服务(nrop)。

而用 NROP
功能,用户要先以治本平台上之老三在数处理启本功能。开启后使用方法和一般的数额处理指令完全一致(比如取
EXIF 信息之接口),仅用以带 nrop 参数的 GET 请求即可,返回的 HTTP
响应内容吗一个包含鉴定结果的 JSON 字符串。示例代码如下:

http://qiniuphotos.qiniudn.com/gogopher.jpg?nrop

拷贝

  1. {

  2. statistic: [

  3. 0,

  4. 0,

  5. 1

  6. ],

  7. reviewCount: 0,

  8. fileList: [{

  9. rate: 0.9946920275688171, //
    介于0-1里面的浮点数,表示该图像被识别为某分类的概率值,概率越强、机器越自然

  10. label: 2, //
    0:色情; 1:性感; 2:正常

  11. name: “739a77baf4ff2d5eae5fe56602fc0cbe/gogopher.jpg”,

  12. review: false //是否需要人工复审该图形,鉴黄服务是否对准结果确定(true:不确定,false:确定)

  13. }],

  14. nonce: “0.5508577267173678”,

  15. timestamp: 1437903830,

  16. code: 0,

  17. message: “success”

  18. }

咱们提供的完全示例已经包含了针对性 NROP
的调用,以及针对广告的评,您得体会一下效。

小结

其一示例结束后,相信你都于了解我们的平台是怎样支持图片内容的修,基本上这些动作都不过是一个简短的
GET 请求即可形成,甚至都未待依赖让
SDK。您得查阅本示例的在线演示,或查看和下载本示例的利落整源代码。

 

音视频处理

从而一个演示详细讲解七牛云对音视频和流动媒体格式的雄强支撑。该示例的靶子呢完成以下动作:

  1. 支撑断点续传的不得了文件上传,因为视频文件通常较充分,难以用单次 POST
    请求完成上传;
  2. 支撑及传后异步执行之自行转码动作,生成若干不同标准的目标视频,分别可当大哥大和处理器上播报;
  3. 用文件转换为 HLS 格式存放,以支持度下载边播放的效益;
  4. 也视频从上一个图水印;
  5. 集合由各一个视频文件抽取一个原则性时间点的画面作为预览图;
  6. 以网页播放器中播放生成的视频文件;

咱俩选用 plupload 作为我们的上传控件,并下 videojs 作为咱们的网页播放器。其他以的技能同之前的示范一致,主要是
Bootstrap 和 Smarty
。因为文件也客户端直传,因此我们为欲提供一个回调服务,以便为接收及传和转码这些异步任务之就事件。为了简单起见,该示例就不再实现一个单独的事情数据库了,直接由目标存储空间得到文件信息。

充分文件及污染

盖好文件上传必须在浏览器端进行,因此我们就非演示如何用 PHP SDK
做断点续上污染了。网页端的深文件上传我们得用定制版的 plupload 来支撑。
具体可以查我们的jssdk。

达成传后自动转码

我们可以经过安装上传策略来打招呼称存储服务以上传完成后自动发起一个异步的职责。上传策略在调用上传接口时当参数传入。
这里的转码过程得支持转为 HLS
格式,并且在转码后从上视频水印。具体变化上污染策略的代码为:

拷贝

  1. $bucket = Config::BUCKET_NAME;

  2. $auth = new Auth(Config::AK,
    Config::SK);

  3.  

  4. $wmImg = Qiniu\base64_urlSafeEncode(‘http://rwxf.qiniudn.com/logo-s.png’);

  5. $pfopOps = “avthumb/m3u8/noDomain/1/wmImage/$wmImg”;

  6. $policy = array(

  7. ‘persistentOps’ => $pfopOps,

  8. ‘persistentNotifyUrl’ => ‘http://&lt;your\_notify\_url&gt;’,

  9. );

  10.  

  11. $upToken = $auth->uploadToken($bucket, null, 3600,
    $policy);

  12.  

  13. echo json_encode(array(‘uptoken’ =>
    $upToken));

抽取视频截图

咱们得自达传视频中截取固定时间点的轴,以作这些视频的封皮图片。视频截图如下所示:

拷贝

  1. http://&lt;your\_uploaded\_video&gt;?vframe/jpg/offset/5

视频浏览和广播

以得上述工作后,接下去的行事便简单了。我们可以很成一个列表网页,每个列表项都是同一摆视频截图,点击视频截图会弹有一个广播面板。因为类似之前端代码都以本文档展示过,这里虽不再多展示同糟。

小结

视频的言传身教就交此处就了。您可直接翻本示例的在线演示,或下载和查本示例的终结整源代码。

欲注意的是,我们立马边下了videojs的开源播放器,
世面上还发生其它比较良好之播放器,具体而可参考播放器推荐。

另外,对于视频内容,CDN
的选会是一个影响视频播放是否能够足够流畅的关键因素。在融合 CDN
管理平台会给列有底可用 CDN 线路标注是否适用于视频加速,请合理选择。

 

文件及污染

 

上传流程

为尽量地改善终端用户之上传体验,七牛云存储首创了客户端直传功能。更多信息要参见业务流程。

上传代码:

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. // 引入鉴权类

  5. use Qiniu\Auth;

  6.  

  7. // 引入上传类

  8. use Qiniu\Storage\UploadManager;

  9.  

  10. // 需要填写您的 Access Key 和 Secret
    Key

  11. $accessKey = ‘Access_Key’;

  12. $secretKey = ‘Secret_Key’;

  13.  

  14. // 构建鉴权对象

  15. $auth = new Auth($accessKey,
    $secretKey);

  16.  

  17. // 要上污染之空间

  18. $bucket = ‘Bucket_Name’;

  19.  

  20. // 生成达传 Token

  21. $token = $auth->uploadToken($bucket);

  22.  

  23. // 要高达污染文书的本地路径

  24. $filePath = ‘./php-logo.png’;

  25.  

  26. // 上盛传七牛后保存的文件称

  27. $key = ‘my-php-logo.png’;

  28.  

  29. // 初始化 UploadManager
    对象并开展文件之达成传

  30. $uploadMgr = new UploadManager();

  31.  

  32. // 调用 UploadManager 的 putFile
    方法开展文件的上传

  33. list($ret, $err) =
    $uploadMgr->putFile($token, $key, $filePath);

  34. echo “\n====> putFile result: \n”;

  35. if ($err !== null) {

  36. var_dump($err);

  37. } else {

  38. var_dump($ret);

  39. }

 

上传&回调

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\UploadManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9. $auth = new Auth($accessKey,
    $secretKey);

  10.  

  11. $bucket = ‘Bucket_Name’;

  12. // 上传文书及七牛后,
    七牛将文件名和文件大小回调给业务服务器

  13.  

  14. $policy = array(

  15. ‘callbackUrl’ => ‘http://your.domain.com/callback.php’,

  16. ‘callbackBody’ => ‘filename=$(fname)&filesize=$(fsize)’

  17. );

  18. $uptoken = $auth->uploadToken($bucket, null, 3600,
    $policy);

  19.  

  20. //上传文书之地头路径

  21. $filePath = ‘./php-logo.png’;

  22.  

  23. $uploadMgr = new UploadManager();

  24.  

  25. list($ret, $err) =
    $uploadMgr->putFile($uptoken, null,
    $filePath);

  26. echo “\n====> putFile result: \n”;

  27. if ($err !== null) {

  28. var_dump($err);

  29. } else {

  30. var_dump($ret);

  31. }

 

直达传&预转持续化

因为视频转码为条例:

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\UploadManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9. $auth = new Auth($accessKey,
    $secretKey);

  10.  

  11. $bucket = ‘Bucket_Name’;

  12.  

  13. //转码时用的队名称

  14. $pipeline = ‘abc’;

  15.  

  16. //要拓展转码的转码操作

  17. $fops = “avthumb/mp4/s/640×360/vb/1.25m”;

  18.  

  19. //可以对转码后底公文进行利用saveas参数自定义命名,当然为可以不指定文件会默认命名并保存于当间

  20. $savekey = Qiniu\base64_urlSafeEncode(‘目标Bucket_Name:自定义文件key’);

  21. $fops = $fops.’|saveas/’.$savekey;

  22.  

  23. $policy = array(

  24. ‘persistentOps’ => $fops,

  25. ‘persistentPipeline’ =>
    $pipeline

  26. );

  27. $uptoken = $auth->uploadToken($bucket, null, 3600,
    $policy);

  28.  

  29. //上传文书的地面路径

  30. $filePath = ‘./php-logo.png’;

  31.  

  32. $uploadMgr = new UploadManager();

  33.  

  34. list($ret, $err) =
    $uploadMgr->putFile($uptoken, null,
    $filePath);

  35. echo “\n====> putFile result: \n”;

  36. if ($err !== null) {

  37. var_dump($err);

  38. } else {

  39. var_dump($ret);

  40. }

队列 (pipeline)
请参阅[缔造私有队列][mpsHref];转码操作实际参数请参见音视频转码;saveas
请参阅处理结果另存。

Tips:上面的 Demo
只是本着视频转码功能,如果你要采用本音视频切片、视频截图、视频拼接等效果只需要修改点
fops 后面的参数即可,如:$fops =
vframe/jpg/offset/1/w/480/h/360/rotate/90
 就代表视频截图了。

好看来上传成功后底表现要是由上传凭证遭的达标传策略来指定。其中
上传策略好指定的行为不断这些,具体求参见上传策略。等文件上传成后即便会见朝您设置的
callbackUrl
发起回调,你的服务器如果经受并处理者回调信息,并返回合法json数据到七牛服务器,七牛将接收及之
json
数据返回给客户端。下面我们叫一个例证来拘禁怎么收回调信息,并证实该回调是否来七牛:

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5.  

  6. $accessKey = ‘Access_Key’;

  7. $secretKey = ‘Secret_Key’;

  8. $auth = new Auth($accessKey,
    $secretKey);

  9.  

  10. //获取回调的body信息

  11. $callbackBody = file_get_contents(‘php://input’);

  12.  

  13. //回调的contentType

  14. $contentType = ‘application/x-www-form-urlencoded’;

  15.  

  16. //回调的签约信,可以印证该回调是否来七牛

  17. $authorization = $_SERVER[‘HTTP_AUTHORIZATION’];

  18.  

  19. //七牛回调的url,具体可以参考

  20. $url = ‘http://your.domain.com/callback.php’;

  21.  

  22. $isQiniuCallback = $auth->verifyCallback($contentType,
    $authorization, $url, $callbackBody);

  23.  

  24. if ($isQiniuCallback) {

  25. $resp = array(‘ret’ => ‘success’);

  26. } else {

  27. $resp = array(‘ret’ => ‘failed’);

  28. }

  29.  

  30. echo json_encode($resp);

 

文件下充斥

拷贝

  1. <?php

  2. require ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. // 引入鉴权类

  5. use Qiniu\Auth;

  6.  

  7. // 需要填您的 Access Key 和 Secret
    Key

  8. $accessKey = ‘Access_Key’;

  9. $secretKey = ‘Secret_Key’;

  10.  

  11. // 构建鉴权对象

  12. $auth = new Auth($accessKey,
    $secretKey);

  13.  

  14. //baseUrl构造成私空间的域名/key的样式

  15. $baseUrl = ‘http://domain/key’;

  16. $authUrl = $auth->privateDownloadUrl($baseUrl);

  17. echo $authUrl;

  18. ?>

 

空间资源管理

 

获文件信息

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. //初始化Auth状态

  11. $auth = new Auth($accessKey,
    $secretKey);

  12.  

  13. //初始化BucketManager

  14. $bucketMgr = new
    BucketManager($auth);

  15.  

  16. //你一旦测试的长空,
    并且这个key在公空间中设有

  17. $bucket = ‘Bucket_Name’;

  18. $key = ‘php-logo.png’;

  19.  

  20. //获取文件的状态信息

  21. list($ret, $err) =
    $bucketMgr->stat($bucket, $key);

  22. echo “\n====> $key stat : \n”;

  23. if ($err !== null) {

  24. var_dump($err);

  25. } else {

  26. var_dump($ret);

  27. }

 

运动单个文件

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. //初始化Auth状态

  11. $auth = new Auth($accessKey,
    $secretKey);

  12.  

  13. //初始化BucketManager

  14. $bucketMgr = new
    BucketManager($auth);

  15.  

  16. //你若测试的长空,
    并且这个key在你空间被留存

  17. $bucket = ‘Bucket_Name’;

  18. $key = ‘php-logo.png’;

  19.  

  20. //将文件于文本$key移动到文件$key2。可以当不同bucket移动

  21. $key2 = ‘php-logo2.png’;

  22. $err = $bucketMgr->move($bucket, $key, $bucket, $key2);

  23. echo “\n====> move $key to $key2 :
    \n”;

  24. if ($err !== null) {

  25. var_dump($err);

  26. } else {

  27. echo “Success!”;

  28. }

 

复制单个文件

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. //初始化Auth状态

  11. $auth = new Auth($accessKey,
    $secretKey);

  12.  

  13. //初始化BucketManager

  14. $bucketMgr = new
    BucketManager($auth);

  15.  

  16. //你如果测试的半空中,
    并且这个key在你空间被留存

  17. $bucket = ‘Bucket_Name’;

  18. $key = ‘php-logo.png’;

  19.  

  20. //将文件于文本$key复制到文件$key2。可以在不同bucket复制

  21. $key2 = ‘php-logo2.png’;

  22. $err = $bucketMgr->copy($bucket, $key, $bucket, $key2);

  23. echo “\n====> copy $key to $key2 :
    \n”;

  24. if ($err !== null) {

  25. var_dump($err);

  26. } else {

  27. echo “Success!”;

  28. }

 

删除单个文件

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9.  

  10. //初始化Auth状态

  11. $auth = new Auth($accessKey,
    $secretKey);

  12.  

  13. //初始化BucketManager

  14. $bucketMgr = new
    BucketManager($auth);

  15.  

  16. //你一旦测试的空中,
    并且这个key在你空间被留存

  17. $bucket = ‘Bucket_Name’;

  18. $key = ‘php-logo.png’;

  19.  

  20. //删除$bucket 中之文书 $key

  21. $err = $bucketMgr->delete($bucket, $key);

  22. echo “\n====> delete $key : \n”;

  23. if ($err !== null) {

  24. var_dump($err);

  25. } else {

  26. echo “Success!”;

  27. }

 

历数空间中文件

拷贝

  1. <?php

  2. require_once __DIR__ . ‘/../autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Storage\BucketManager;

  6.  

  7. $accessKey = ‘Access_Key’;

  8. $secretKey = ‘Secret_Key’;

  9. $auth = new Auth($accessKey,
    $secretKey);

  10. $bucketMgr = new
    BucketManager($auth);

  11.  

  12. // 要列取的半空中名称

  13. $bucket = ‘Bucket_Name’;

  14.  

  15. // 要列取文件的公家前缀

  16. $prefix = ”;

  17.  

  18. $marker = ”;

  19. $limit = 3;

  20.  

  21. list($iterms, $marker, $err) =
    $bucketMgr->listFiles($bucket, $prefix, $marker, $limit);

  22. if ($err !== null) {

  23. echo “\n====> list file err: \n”;

  24. var_dump($err);

  25. } else {

  26. echo “Marker:
    $marker\n”;

  27. echo “\nList
    Iterms====>\n”;

  28. var_dump($iterms);

  29. }

 

点持久化操作

以视频转码为条例:

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Auth;

  5. use Qiniu\Processing\PersistentFop;

  6.  

  7. //对都上传到七牛之视频发起异步转码操作

  1.  

  2. $accessKey = ‘Access_Key’;

  3. $secretKey = ‘Secret_Key’;

  4. $auth = new Auth($accessKey,
    $secretKey);

  5.  

  6. //要转码的文书所在的空中与文件称

  7. $bucket = ‘Bucket_Name’;

  8. $key = ‘1.mp4’;

  9.  

  10. //转码是以的班名称

  11. $pipeline = ‘abc’;

  12. $pfop = new PersistentFop($auth, $bucket,
    $pipeline);

  13.  

  14. //要开展转码的转码操作

  15. $fops = “avthumb/mp4/s/640×360/vb/1.25m”;

  16.  

  17. list($id, $err) = $pfop->execute($key,
    $fops);

  18. echo “\n====> pfop avthumb result:
    \n”;

  19. if ($err != null) {

  20. var_dump($err);

  21. } else {

  22. echo “PersistentFop Id: $id\n”;

  23. }

  24.  

  25. //查询转码的进度及状态

  26. list($ret, $err) =
    $pfop->status($id);

  27. echo “\n====> pfop avthumb status:
    \n”;

  28. if ($err != null) {

  29. var_dump($err);

  30. } else {

  31. var_dump($ret);

  32. }

Tips:上面的Demo只是对视频转码功能,如果您需利用仍音视频切片、视频截图、视频拼接等功用只待改者
fops 后面的参数即可,如:$fops =
vframe/jpg/offset/1/w/480/h/360/rotate/90
 就表示视频截图了。

透过者的代码我们便可触发将积存于半空中被的视频由 mp4 格式转换成 m3u8 格式,并设置分辨率和见到频码率。
但这个才是以转码这个耗时的操作提交至队中,要惦记知道转码操作现在底状态,需要基于返回的
persitentId 进行查询。

拷贝

  1. <?php

  2. require_once ‘path_to_sdk/vendor/autoload.php’;

  3.  

  4. use Qiniu\Processing\PersistentFop;

  5.  

  6. // 触发持久化处理后返的 Id

  7. $persistentId = ‘z0.564d5f977823de48a85ece59’;

  8.  

  9. // 通过persistentId查询该
    触发持久化处理的状态

  10. $status = PersistentFop::status($persistentId);

  11.  

  12. var_dump($status);

使你不便民持续轮询每个异步处理的速度与状态,七牛可异步处理完了后通知您们的业务服务器。
这样即便得您于视频转码的例子中,初始化 PersistentFop 时加加上 notifyUrl
来通知您们的事体服务器:

拷贝

  1. //你工作服务器的地址

  2. $notifyUrl = ‘http://your.bizhost.com/notify.php’;

  3. $pfop = new PersistentFop($auth, $bucket,
    $pipeline, $notifyUrl);

公的作业服务器需要收取来自七牛的通报:

拷贝

  1. <?php

  2.  

  3. // 获取notify通知的body信息

  4. $notifyBody = file_get_contents(‘php://input’);

  5.  

  6. // 业务服务器处理通报消息,
    这里直接打印在log中

  7. error_log($notifyBody);

咱俩盖视频转码为例子,完整介绍了点持久化的整工艺流程。触发持久化本质上是:使用异步队列的艺术来拍卖已经上传到七牛之数资源并将拍卖的结果持久化到七牛。虽然足采用触发持久化的方法处理七牛所部分数处理,但是图处理等得以联手处理的,建议用并处理。关于音视频处理,比如音视频转码,音视频切片,音视频拼接对等比较耗时的操作必须运用触发持久化方式,或者在上传凭证中指定处理参数的预转持久化操作。

 

API参考手册

  • 靶存储API参考手册
  • 数处理API参考手册

 

普遍问题

相关文章