七牛云–开发笔记

付出文档: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 中任重(英文名:rèn zhòng)而道远负责对空间中已上传的文本进行异步处理,并对异步处理的结果开展持久化操作。比如对已上传的视频文件举行转码,拼接,切片,水印等拍卖,并将处理后的结果保存在半空中。

拷贝

  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)
文档。

图片新闻

拷贝

  1. {

  2. format: “jpeg”,

  3. width: 640,

  4. height: 427,

  5. colorModel: “ycbcr”,

  6. orientation: “Top-left”

  7. }

拷贝

  1. {

  2. RGB: “0x85694d”

  3. }

拷贝

  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参考手册

 

广大难点

相关文章