###SDK下载包:www.xxx.xxx###环境说明操作系统:centos7.x(x86)PHP 5.6.4+,可通过php -v命名查看当前的php版本curl 扩展,可通过php -m命令查看
###SDK
- 下载包:www.xxx.xxx
###环境说明
- 操作系统:centos7.x(x86)
- PHP 5.6.4+,可通过
php -v
命名查看当前的php版本 - curl 扩展,可通过
php -m
命令查看curl扩展是否已经安装好
###目录架构
类名 | 解释 | 引入依赖 |
---|---|---|
request.php | 请求中间类 | 无需引入 |
httprequest.class.php | http请求类 | 无需引入 |
cluster.php | 集群模块的SDK | 按需引入 |
user.php | 用户模块的SDK | 按需引入 |
bucket.php | 桶管理模块的SDK | 按需引入 |
object.php | 对象管理模块的SDK | 按需引入 |
pretreat.php | 预处理模块的SDK | 按需引入 |
meta.php | 元数据模块的SDK | 按需引入 |
demo.test.php | 入门示例 | / |
###快速入门为了您更快速的上手,我们给您提供了一个示例:demo.test.php
。其中已经导入相关依赖库,您只需在环境配置完成后运行demo.test.php
,便可以查询到cayman当前的版本信息
为了防止代码冲突,我们已将sdk
置于命名空间caymansdk
下,请您注意文件引入方式
<?phpuse phplibs/caymansdk as caymansdk; // 引用namespacerequire_once __DIR__ .'/cluster.php'; // 引入集群管理sdktry { // 实例化Cluster类 $_cluster = new caymansdk/Cluster();; //调用getVersion方法 $res = $_cluster->getVersion(); // 判断调用是否成功并返回相关信息 if($res["code"] === CODE_SUCCESS){ echo json_encode(['code' => CODE_SUCCESS, 'result' => $res['result']]); } else{ $msg = $res["msg"] ? $res["msg"] : 'system error'; echo json_encode(['code' => CODE_ERROR, 'msg' => $msg]); }} catch (OssException $e) { print $e->getMessage();}?>
###基本操作####添加依赖在调用各功能模块的SDK前,您需要导入相关模块的SDK文件,如下列代码所示:
<?phpuse phplibs/caymansdk as caymansdk; // 引用namespacerequire_once __DIR__ .'/bucket.php'; // 引入您所需的模块SDK......?>
参照demo.test.php
中的示例格式.####创建桶(存储空间)和快速入门所展示的一样,您可以按照下面的代码新建一个桶(存储空间)
<?phpuse phplibs/caymansdk as caymansdk; // 引用namespacerequire_once __DIR__ .'/bucket.php'; // 引入桶管理sdk$userid = "<您被授权的用户名>";$bucket = "<您想创建的桶名,注意命名规范>";$_bucket = new caymansdk/Bucket();$res = $_bucket->createBucket($bucket, $userid); if($res["code"] === CODE_SUCCESS){ echo json_encode(['code' => CODE_SUCCESS, 'result' => $res['result']]);} else{ $msg = $res["msg"] ? $res["msg"] : 'system error'; echo json_encode(['code' => CODE_ERROR, 'msg' => $msg]);}?>
####上传文件(对象)文件(object)是cayman中最基本的数据单元,文件的上传分为三步完成createObject
、writeObject
、finishObject
.目前没有将三者合并封装,所以您需要根据接口自行补全该部分代码。但我们提供一个JaveScript版本的示例代码,实现文件上传功能#####创建一个空文件对象(createObject)
/*** 创建一个空文件对象* @param {string}$bucket 存储桶名(必选)* @param {string}$userid 存在的用户名(必选)* @param {string}$object 对象名称(必选)* @param {int64}$size 对象大小(必选)* @return arr['code'=>200]*/ public function createObject($bucket, $userid, $object, $size){ $param = [ 'bucket' => $bucket, 'userid' => $userid, 'object' => $object, 'size' => $size ]; $res = $this->post(CAYMAN_CREATE_OBJECT, $param); return json_decode($res, true); }
#####上传对象数据块(writeObject)
/** * 上传数据块 * @param {string}$bucket 存储桶名(必选) * @param {string}$userid 存在的用户名(必选) * @param {string}$object 对象名称(必选) * @param {int64}$offset 写入数据块的起始位置(必选) * @param {int}$length 写入数据块大小(必选) * @return arr['code'=>200] */ public function writeObject($bucket, $userid, $object, $offset, $length){ $param = [ 'bucket' => $bucket, 'userid' => $userid, 'object' => $object, 'offset' => $offset, 'length' => $length ]; $res = $this->post(CAYMAN_FILE_UPLOAD_WRITE, $param); return json_decode($res, true); }
#####完成文件上传(finishObject)
/** * 完成文件上传 * @param {string}$bucket 存储桶名(必选) * @param {string}$userid 存在的用户名(必选) * @param {string}$object 对象名称(必选) * @param {bool}$isconvert 是否预处理(可选) * @return arr['code'=>200] */ public function finishObject($bucket, $userid, $object, $isconvert){ $param = [ 'bucket' => $bucket, 'userid' => $userid, 'object' => $object, 'isconvert' => $isconvert, ]; $res = $this->post(CAYMAN_FILE_UPLOAD_FINISH, $param); return json_decode($res, true); }
#####封装三个接口实现文件上传(JS版)
var formData = new FormData(); // 浏览器兼容处理 var func = (opts.file.mozSlice ? 'mozSlice' : (opts.file.webkitSlice ? 'webkitSlice' : 'slice')); // 添加文件数据块 formData.append("file", opts.file[func](startSize, endSize)); // 添加其他参数 formData.append("bucket", bucket); formData.append("object", object); formData.append("offset", startSize); formData.append("length", endSize - startSize); // 开启ajax请求 var xhr = new XMLHttpRequest(); xhr.open("POST", opts.target); xhr.setRequestHeader('Authorization', oauth); // 回调函数--分块持续上传文件 xhr.onreadystatechange = function(){ if (xhr.readyState === 4){ if(canceled) return; try{ var result = JSON.parse(xhr.responseText); if(result.code === 200){ done = true; owner.progress(); sendData(); }else{ done = false; owner.onerror(result.msg); } }catch(e){ owner.onerror("unknow error "+e); } } } xhr.send(formData);
####下载文件上传文件后,您可以通过下载读取它的内容。以下为示例代码
<?php use phplibs/caymansdk as caymansdk; require_once __DIR__ .'/object.php'; $userid = "<您被授权的用户名>"; $bucket = "<您想创建的桶名,注意命名规范>"; $object = "<要读取的对象ID>"; $offset = "<要读取的文件偏移量>"; $length = "<要读取连续多长的数据,单位byte>"; $_object = new caymansdk/Object(); $res = $_object->readObject($bucket, $userid, $object, $offset, $length); if($res["code"] === CODE_SUCCESS){ echo json_encode($res,true); } else{ $msg = $res["msg"] ? $res["msg"] : 'system error'; echo json_encode(['code' => CODE_ERROR, 'msg' => $msg]); } ?>
####列举桶内文件完成上传后,需要查看桶内所有文件信息,实现如下面代码所示:
<?php use phplibs/caymansdk as caymansdk; require_once __DIR__ .'/bucket.php'; $userid = "桶的拥有者"; $bucket = "存储桶名"; $maxcount = "返回的最大对象数"; $_bucket = new caymansdk/Bucket();; $res = $_bucket->listObjects($bucket, $userid, $maxcount); if($res["code"] === CODE_SUCCESS){ echo json_encode(['code' => CODE_SUCCESS, 'result' => $res['result']]); } else{ $msg = $res["msg"] ? $res["msg"] : 'system error'; echo json_encode(['code' => CODE_ERROR, 'msg' => $msg]); } ?>
####删除文件以下代码可以删除指定存储空间下指定的文件(Object):
<?php use phplibs/caymansdk as caymansdk; require_once __DIR__ .'/object.php'; $userid = "<用户名>"; $bucket = "<对象所属的桶名称>"; $object = "<要删除的对象名称>"; $_object = new caymansdk/Object(); $res = $_object->removeObject($bucket, $userid, $object); if($res["code"] === CODE_SUCCESS){ echo json_encode(['code' => CODE_SUCCESS]); } else{ $msg = $res["msg"] ? $res["msg"] : 'system error'; echo json_encode(['code' => CODE_ERROR, 'msg' => $msg]); } ?>