得图云应用帮助

使用说明

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
参数名说明
postdatajson配置的base64编码字符串。
signaturemd5(postdata&AccessSecret)。
postdata配置参数
参数名说明
access_key您的Access Key。
expiration过期时间戳。
return_url跳转型回调的跳转地址。
notify_url服务端回调通知地址。
imageid用于回调的标识字符串。
path原图存储路径,不包含空间名(如a空间下b.jpg文件路径为/b.jpg)。
name全景名称。
categoryid分类ID。
bucket空间名。
切图回调
参数名说明
postdatajson格式数据的base64编码字符串。
signaturemd5(postdata&AccessSecret)。
postdata配置参数
参数名说明
thumb缩略图地址。
categoryid分类ID。
xml_path配置地址。
xml_fpath_f的配置地址。
html5_pathhtml地址。
detu_pid得图云全景唯一标识。
imageid回调上传时的imageid。
html5_3dpreviewhtml5的图片地址。
servernorurl原图地址。
删除接口
http://pano.detuyun.com/api/files/delete
参数名说明
postdatajson配置的base64编码字符串。
signaturemd5(postdata&AccessSecret)。
postdata配置参数
参数名说明
access_key您的Access Key。
expiration过期时间戳。
notify_url服务端回调通知地址。
imageid用于回调的标识字符串。
detu_pid得图云全景唯一标识。
删除回调
参数名说明
imageid删除时用于回调的imageid。
高清接口参数说明
切图接口
http://hd.detuyun.com/api/files/create_hd
参数名说明
postdatajson配置的base64编码字符串。
signaturemd5(postdata&AccessSecret)。
postdata配置参数
参数名说明
access_key您的Access Key。
expiration过期时间戳。
return_url跳转型回调的跳转地址。
notify_url服务端回调通知地址。
imageid用于回调的标识字符串。
path原图存储路径,不包含空间名(如a空间下b.jpg文件路径为/b.jpg)。
name高清名称。
categoryid分类ID。
bucket空间名。
切图回调
参数名说明
postdatajson格式数据的base64编码字符串。
signaturemd5(postdata&AccessSecret)。
postdata配置参数
参数名说明
thumb缩略图地址。
categoryid分类ID。
xml_path配置地址。
detu_pid得图云高清唯一标识。
imageid回调上传时的imageid。
servernorurl原图地址。
删除接口
http://hd.detuyun.com/api/files/delete
参数名说明
postdatajson配置的base64编码字符串。
signaturemd5(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>