使用说明
1. OSS域名绑定
OSS域名绑定(CNAME)功能目前仅支持OSS以三级域名访问方式进行绑定。
即您的OSS访问方式为(Bucket name).img.detuyun.cn
请确定您目前的采用上述访问方式后,再进行以下域名绑定操作。
1.1 登录得图云后台
登录链接http://www.detuyun.com/login
1.2 设置绑定域名
填写要绑定的域名
说明:
1) 拥有得图云接入“ICP备案号”的用户域名可绑定一级、二级等任意域名。
2) 拥有第三方接入“ICP备案号”的二级以上用户域名。(如:img.detu.com)
1.3 CNAME域名解析
(1)登录域名服务商后台(下图以万网域名管理为例),点击“域名管理”;
(2)选择“域名解析”点击“新增解析”按钮
(3)“记录类型”选择“CNAME记录”
(4)“记录值”填写(Bucket name). img.detuyun.cn
说明:
1) 目前仅支持绑定OSS的三级域名方式,
2) Bucket name是您要绑定的OSS中Bucket名称
1.4 访问地址
成功绑定后,访问OSS上的文件即可成为:http://已绑定域名/object (示例: www.a.com/object文件名)
1.5 补充说明
请正在使用通过DNS将自己的域名解析到“OSS二级通信域名(img.detuyun.cn)”的用户请注意!
当您完成上述“OSS三级通信域名(bucket. img.detuyun.cn) ”域名绑定Bucket的“操作步骤”后,您原来直接通过域名DNS解析到“OSS二级通信域名(img.detuyun.cn)”的所有请求将会立即失效。
因此在您操作“OSS三级通信域名” 域名绑定功能前,请先确认您正在使用的线上应用服务是否会受到影响,为了您的应用服务能够平滑切换,我们建议:
第一步:你的应用程序中,访问方式切换成直接访问“OSS三级通信域名(bucket. img.detuyun.cn)”; 发布您的应用,保证您的线上应用服务是通过(bucket. img.detuyun.cn /objcet)进行访问的。
第二步 完成上述“OSS三级通信域名(bucket. img.detuyun.cn)”域名绑定的“操作步骤”,此时可通过 www.a.com/object进行测试,并将新链接更新到您的应用程序中,再次发布您的应用。
2. 第三方应用接入
2.1 接入流程
(1) 注册得图云帐号并开通所需应用(使用得图存请添加空间)。
(2)获取得图云Access Key和 Access Secret。(登陆得图云帐号,进入帐号管理的AccessKey管理界面获取)
(3)调用得图云API接入得图云服务
2.2 API接入
若非必要,建议使用表单API方式上传图片。使用表单API上传可以借助得图云服务加快上传速度,并且可以去除第三方文件中转以及服务器存储和处理图片的压力。以下是采用表单API方式上传的PHP例子,得图云API详情请参考得图云应用API。
表单API使用方法 参考文档
得图社区flash上传模式流程 (可以登陆得图社区上传进行体验)
(1) 得图社区生成上传表单API上传所需参数。
(2) 得图社区用户使用flash控件选择图片并通过表单API上传图片。
(3) 得图云接收到数据并成功处理后,访问得图社区指定的通知接口。
(4) 得图社区的通知接口接收到通知后,对数据进行入库记录并返回处理结果给得图云。
(5) 得图云将通知得到的处理结果以及相关文件信息数据一起返回到flash上传控件。
(6)flash上传空间得到回调信息后,将数据呈现在界面。
(7) 若用户发布上传的图片,那么处理用户在界面提交的数据,并发送切图通知到得图云;若用户不发布,那么该数据以及上传的文件将会被自动清理程序清理掉。
注:清理或删除数据时,务必使用Image Server API删除表单API上传的原图。
PHP代码样例
PHP参数生成代码
$options = array(); $options['bucket'] = BUCKET; //空间名 $options["access_key"]= ACCESSKEY; //您的Access Key $options['expiration'] = time()+36000; //授权过期时间 $options['ext_param'] = "$userid|$picmode"; //扩展参数 里面存用户ID和照片类型(根据应用可自行变化) $options['save_name'] = '/{random}{.suffix}'; //文件存储路径 $options['notify_url'] = 'http://www.detu.com/callback'; //服务端同步通知地址, 请注意该地址必须公网可以正常访问$policy = base64_encode(json_encode($options)); //base64编码配置参数 $sign = md5($data['policy'].'&'.ACCESSSECRET); //md5签名 ACCESSSECRET为您的Access Secret
服务器通知接收程序
if(isset($_POST['sign'])){ //正常签名 ACCESSSECRET为您的Access Secret if(md5("{$_POST['code']}&{$_POST['msg']}&{$_POST['url']}&{$_POST['time']}&".ACCESSSECRET) == $_POST['sign']){ //合法的上传回调 if($_POST['code'] == '200'){ //上传成功 //进行用户上传文件的记录等操作 并返回处理结果 ... }else{ //上传失败 die('false'); } }else{ //回调的签名错误 header('HTTP/1.1 403 Not Access'); die('false'); } }else{ //回调的签名错误 header('HTTP/1.1 403 Not Access'); die('false'); }
通知接收参数说明
参数名 | 说明 |
---|---|
code | 值为200时表示上传得图云成功。 |
msg | 通知信息说明。 |
url | 访问文件的地址。 |
time | 时间戳。 |
sign | 验证签名。 |
ext_param | 扩展参数,上传时传递的值。 |
exif | 图片exif信息组成的json字符串。 |
x-detuyun-width | 图片宽。 |
x-detuyun-height | 图片高。 |
x-detuyun-type | 文件类型。 |
x-detuyun-frames | 帧数。 |
x-detuyun-filepath | 存储路径。 |
全景高清接口说明
方式 POST
接口公共返回参数
参数名 | 说明 |
---|---|
http_code | 返回代码,200表示成功。 |
message | 提示信息。 |
全集接口参数说明
切图接口
http://pano.detuyun.com/api/files/create_pano
参数名 | 说明 |
---|---|
postdata | json配置的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
access_key | 您的Access Key。 |
expiration | 过期时间戳。 |
return_url | 跳转型回调的跳转地址。 |
notify_url | 服务端回调通知地址。 |
imageid | 用于回调的标识字符串。 |
path | 原图存储路径,不包含空间名(如a空间下b.jpg文件路径为/b.jpg)。 |
name | 全景名称。 |
categoryid | 分类ID。 |
bucket | 空间名。 |
切图回调
参数名 | 说明 |
---|---|
postdata | json格式数据的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
thumb | 缩略图地址。 |
categoryid | 分类ID。 |
xml_path | 配置地址。 |
xml_fpath | _f的配置地址。 |
html5_path | html地址。 |
detu_pid | 得图云全景唯一标识。 |
imageid | 回调上传时的imageid。 |
html5_3dpreview | html5的图片地址。 |
servernorurl | 原图地址。 |
删除接口
http://pano.detuyun.com/api/files/delete
参数名 | 说明 |
---|---|
postdata | json配置的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
access_key | 您的Access Key。 |
expiration | 过期时间戳。 |
notify_url | 服务端回调通知地址。 |
imageid | 用于回调的标识字符串。 |
detu_pid | 得图云全景唯一标识。 |
删除回调
参数名 | 说明 |
---|---|
imageid | 删除时用于回调的imageid。 |
高清接口参数说明
切图接口
http://hd.detuyun.com/api/files/create_hd
参数名 | 说明 |
---|---|
postdata | json配置的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
access_key | 您的Access Key。 |
expiration | 过期时间戳。 |
return_url | 跳转型回调的跳转地址。 |
notify_url | 服务端回调通知地址。 |
imageid | 用于回调的标识字符串。 |
path | 原图存储路径,不包含空间名(如a空间下b.jpg文件路径为/b.jpg)。 |
name | 高清名称。 |
categoryid | 分类ID。 |
bucket | 空间名。 |
切图回调
参数名 | 说明 |
---|---|
postdata | json格式数据的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
thumb | 缩略图地址。 |
categoryid | 分类ID。 |
xml_path | 配置地址。 |
detu_pid | 得图云高清唯一标识。 |
imageid | 回调上传时的imageid。 |
servernorurl | 原图地址。 |
删除接口
http://hd.detuyun.com/api/files/delete
参数名 | 说明 |
---|---|
postdata | json配置的base64编码字符串。 |
signature | md5(postdata&AccessSecret)。 |
postdata配置参数
参数名 | 说明 |
---|---|
access_key | 您的Access Key。 |
expiration | 过期时间戳。 |
notify_url | 服务端回调通知地址。 |
imageid | 用于回调的标识字符串。 |
detu_pid | 得图云全景唯一标识。 |
删除回调
参数名 | 说明 |
---|---|
imageid | 删除时用于回调的imageid。 |
得图云应用PHP sdk代码(高清全景)
<pre>
define('ACCESS_KEY','ACCESS_KEY'); //您的ACCESS_KEY
define('ACCESS_SECRET','ACCESS_SECRET'); //您的ACCESS_SECRET
define('BUCKET_NAME','BUCKET_NAME'); //图片存储的空间名
define('PANO_SERVER_URL','http://pano.detuyun.com/api/files/create_pano') //全景通知切图地址
define('PANO_SERVER_URL1','http://pano.detuyun.com/api/files/hdupload'); //全景上传地址
define('PANO_DELETE_URL','http://pano.detuyun.com/api/files/delete'); //全景删除地址
define('PANO_PUBLISH_URL','http://pano.detuyun.com/api/files/publish'); //全景发布地址
define('PANO_CALLBACK','PANO_CALLBACK'); //全景回调地址
define('PANO_DELETE_CALLBACK','PANO_DELETE_CALLBACK'); //全景删除回调地址
define('HD_SERVER_URL','http://hd.detuyun.com/api/files/create_hd'); //高清通知切图地址
define('HD_SERVER_URL1','http://hd.detuyun.com/api/files/hdupload'); //高清上传地址
define('HD_DELETE_URL','http://hd.detuyun.com/api/files/delete'); //高清删除地址
define('HD_CALLBACK','HD_CALLBACK'); //高清切图回调地址
define('HD_DELETE_CALLBACK','HD_DELETE_CALLBACK'); //高清删除回调地址
/**
*得图云应用功能调用类
*/
class detuapp
{
/**
* 获取回调参数
* @param array $post 得图云服务回调时的post数组
* @return array 返回解析后的数据数组
*/
function callback_param($post)
{
$postdata=isset($post['postdata'])?htmlspecialchars_decode($post['postdata']):'';
$signature=isset($post['signature'])?$post['signature']:'';
$policy = $postdata;
$sign=md5($policy.'&'.ACCESS_SECRET);
if($sign==$signature)
{
return json_decode(base64_decode($postdata),true);
}
else
{
return array();
}
}
/**
* 上传全景并切图 建议使用发送切图消息接口来替换此接口
* @param string $imageid 照片id用于回调
* @param string $filedata (@D:\...\file.jpg)需要上传的图片
* @return boolean 标识是否通知成功
*/
function create_pano($imageid,$filedata)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options["access_key"]=$form_api_key;
$options['expiration'] = time()+600;
$options['return_url'] = ''; /// 页面跳转型回调地址
$options['notify_url'] = PANO_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['imageid']=$imageid;
$options["dir"]= '/';//存放在根目录下
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign,'filedata'=>$filedata);
$str = $this->curl(PANO_SERVER_URL1,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/**
* 发送全景切图消息
* @param string $imageid 用于回调的标识
* @param string $name 全景名称
* @param strong $path 图片在得图云上的存储路径 例如b目录中的c.jpg文件 为 b/c.jpg
* @return boolean 标识是否通知成功
*/
function send_pano($imageid,$name,$path)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options['access_key']=$form_api_key;
$options['expiration'] = time()+600;
$options['return_url'] = ''; /// 页面跳转型回调地址
$options['notify_url'] = PANO_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['imageid']=$imageid;
$options['path']=$path;
$options['name']=$name;
$options['bucket']=BUCKET_NAME;
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign);
$str = $this->curl(PANO_SERVER_URL,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/*
* 删除全景
* @param int $detu_pid 得图云上全景唯一标识
* @param int $imageid 用于回调的标识
* @return boolean 标识是否通知成功
*/
function delete_pano($detu_pid,$imageid)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options["access_key"]=$form_api_key;
$options['expiration'] = time()+600;
$options['notify_url'] = PANO_DELETE_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['detu_pid']=$detu_pid;
$options['imageid']=$imageid;
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign);
$str = $this->curl(PANO_DELETE_URL,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/**
* 发布全景
* @param int $detu_pid 得图云上全景唯一标识
* @param string $initcamera 初始视角
* @param string $direction 方向角
* @return boolean 标识是否通知成功
*/
function publish_pano($detu_pid,$initcamera=NULL,$direction=NULL)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options["access_key"]=$form_api_key;
$options['expiration'] = time()+600;
$options['detu_pid']=$detu_pid;
$options['initcamera']=$initcamera;
$options['direction']=$direction;
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign);
$str = $this->curl(PANO_PUBLISH_URL,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/**
* 上传高清并切图 建议使用发送切图消息接口来替换此接口
* @param string $imageid 用于回调的标识
* @param string $filedate @文件路径
* @return boolean 标识是否通知成功
*/
function create_hd($imageid,$filedata)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options["access_key"]=$form_api_key;
$options['expiration'] = time()+600;
$options['return_url'] = ''; /// 页面跳转型回调地址
$options['notify_url'] = HD_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['imageid']=$imageid;
$options["dir"]= '/';//存放在根目录下
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign,'filedata'=>$filedata);
$str = $this->curl(HD_SERVER_URL1,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/**
* 发送高清切图消息
* @param string $imageid 用于回调的标识
* @param string $name 高清名称
* @param strong $path 图片在得图云上的存储路径 例如b目录中的c.jpg文件 为b/c.jpg
* @return boolean 标识是否通知成功
*/
function send_hd($imageid,$name,$path)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options['access_key']=$form_api_key;
$options['expiration'] = time()+600;
$options['return_url'] = ''; /// 页面跳转型回调地址
$options['notify_url'] = HD_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['imageid']=$imageid;
$options['path']=$path;
$options['name']=$name;
$options['bucket']=BUCKET_NAME;
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign);
$str = $this->curl(HD_SERVER_URL,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/**
* 删除高清
* @param int $detu_pid 得图云高清唯一标识
* @param string $imageid 用于回调
*/
function delete_hd($detu_pid,$imageid)
{
$options = array();
$form_api_key = ACCESS_KEY;
$form_api_secret = ACCESS_SECRET;
$options["access_key"]=$form_api_key;
$options['expiration'] = time()+600;
$options['notify_url'] = HD_DELETE_CALLBACK; //服务端异步回调地址, 请注意该地址必须公网可以正常访问
$options['detu_pid']=$detu_pid;
$options['imageid']=$imageid;
$policy = base64_encode(json_encode($options));
$sign = md5($policy.'&'.$form_api_secret);
$params=array('postdata'=>$policy,'signature'=>$sign);
$str = $this->curl(HD_DELETE_URL,'POST',$params,true);
$result=json_decode($str,true);
return isset($result['http_code'])&&$result['http_code']==200;
}
/*
*访问失败或者出错时返回FALSE
*/
private function curl($path, $method = 'GET', $params = array(), $file_upload_support)
{
$opts=array();
$ch = curl_init();
$opts[CURLOPT_URL] = $path;
$opts[CURLOPT_RETURNTRANSFER] = TRUE;
switch (strtoupper($method))
{
case 'GET':
$path .= '?' . http_build_query($params, NULL, '&');
break;
default:
if ($file_upload_support) {
$opts[CURLOPT_POSTFIELDS] = $params;
}
else {
$opts[CURLOPT_POSTFIELDS] = http_build_query($params, NULL, '&');
}
break;
}
curl_setopt_array($ch, $opts);
$result = curl_exec($ch);
if(curl_error($ch))
{
curl_close($ch);
return FALSE;
}
curl_close($ch);
return $result;
}
}
</pre>