开发者社区 问答 正文

C-SDK之如何实现 初始化?


确定Endpoint


Endpoint是阿里云OSS服务在各个区域的地址,目前支持两种形式

Endpoint类型解释
OSS区域地址使用OSS Bucket所在区域地址,各个区域Endpoint参考这里
用户自定义域名用户自定义域名,且CNAME指向OSS域名

关于Endpoint,可以参考: 点击查看

OSS区域地址


使用OSS Bucket所在区域地址,Endpoint查询可以有下面两种方式:
  • 查询Endpoint与区域对应关系详情,可以参考:点击查看
  • 您可以登录 阿里云OSS控制台,进入Bucket概览页,Bucket域名的后缀部分:如bucket-1.oss-cn-hangzhou.aliyuncs.com的oss-cn-hangzhou.aliyuncs.com部分为该Bucket的外网Endpoint。


CNAME

  • 您可以将自己拥有的域名通过CNAME绑定到某个存储空间(Bucket)上,然后通过自己域名访问存储空间内的文件
  • 比如您要将域名new-image.xxxxx.com绑定到深圳区域的名称为image的存储空间上:
  • 您需要到您的域名xxxxx.com托管商那里设定一个新的域名解析,将http://new-image.xxxxx.com 解析到 http://image.oss-cn-shenzhen.aliyuncs.com ,类型为CNAME


配置密钥


要接入阿里云OSS,您需要拥有一对有效的 AccessKey(包括AccessKeyId和AccessKeySecret)用来进行签名认证。可以通过如下步骤获得:
在获取到 AccessKeyId和 AccessKeySecret之后,您可以按照下面步骤进行初始化

初始化请求选项


使用OSS C SDK时需要初始化请求选项(oss_request_options_t),其中config用于存储访问OSS的基本信息,比如OSS域名、用户的AccessKeyId 、用户的AccessKeySecret。is_cname变量指定访问OSS是否使用CNAME。 ctl用于设置访问OSS时的控制信息。
  1. [backcolor=transparent]void[backcolor=transparent] init_options[backcolor=transparent]([backcolor=transparent]oss_request_options_t[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]options[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  2. [backcolor=transparent]    options[backcolor=transparent]->[backcolor=transparent]config [backcolor=transparent]=[backcolor=transparent] oss_config_create[backcolor=transparent]([backcolor=transparent]options[backcolor=transparent]->[backcolor=transparent]pool[backcolor=transparent]);
  3. [backcolor=transparent]    aos_str_set[backcolor=transparent](&[backcolor=transparent]options[backcolor=transparent]->[backcolor=transparent]config[backcolor=transparent]->[backcolor=transparent]endpoint[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"<您的Endpoint>"[backcolor=transparent]);
  4. [backcolor=transparent]    aos_str_set[backcolor=transparent](&[backcolor=transparent]options[backcolor=transparent]->[backcolor=transparent]config[backcolor=transparent]->[backcolor=transparent]access_key_id[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"<您的AccessKeyId>"[backcolor=transparent]);
  5. [backcolor=transparent]    aos_str_set[backcolor=transparent](&[backcolor=transparent]options[backcolor=transparent]->[backcolor=transparent]config[backcolor=transparent]->[backcolor=transparent]access_key_secret[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]"<您的AccessKeySecret>"[backcolor=transparent]);
  6. [backcolor=transparent]    options[backcolor=transparent]->[backcolor=transparent]config[backcolor=transparent]->[backcolor=transparent]is_cname [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]0[backcolor=transparent];
  7. [backcolor=transparent]    options[backcolor=transparent]->[backcolor=transparent]ctl [backcolor=transparent]=[backcolor=transparent] aos_http_controller_create[backcolor=transparent]([backcolor=transparent]options[backcolor=transparent]->[backcolor=transparent]pool[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]0[backcolor=transparent]);
  8. [backcolor=transparent]}
  9. [backcolor=transparent]int[backcolor=transparent] main[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
  10. [backcolor=transparent]    [backcolor=transparent]aos_pool_t[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]p[backcolor=transparent];
  11. [backcolor=transparent]    [backcolor=transparent]oss_request_options_t[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent]options[backcolor=transparent];
  12. [backcolor=transparent]    [backcolor=transparent]/* 全局变量初始化,应该放在程序启动时,其他所有逻辑之前 */
  13. [backcolor=transparent]    [backcolor=transparent]if[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]aos_http_io_initialize[backcolor=transparent]([backcolor=transparent]NULL[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]0[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]!=[backcolor=transparent] AOSE_OK[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
  14. [backcolor=transparent]        [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]-[backcolor=transparent]1[backcolor=transparent];
  15. [backcolor=transparent]    [backcolor=transparent]}
  16. [backcolor=transparent]    [backcolor=transparent]/* 初始化内存池和options */
  17. [backcolor=transparent]    aos_pool_create[backcolor=transparent](&[backcolor=transparent]p[backcolor=transparent],[backcolor=transparent] NULL[backcolor=transparent]);
  18. [backcolor=transparent]    options [backcolor=transparent]=[backcolor=transparent] oss_request_options_create[backcolor=transparent]([backcolor=transparent]p[backcolor=transparent]);
  19. [backcolor=transparent]    init_options[backcolor=transparent]([backcolor=transparent]options[backcolor=transparent]);
  20. [backcolor=transparent]    [backcolor=transparent]/* 逻辑代码 */
  21. [backcolor=transparent]    [backcolor=transparent]/* 释放内存pool资源,包括了通过pool分配的内存,比如options等*/
  22. [backcolor=transparent]    aos_pool_destroy[backcolor=transparent]([backcolor=transparent]p[backcolor=transparent]);
  23. [backcolor=transparent]    [backcolor=transparent]/* 释放全局资源,应该放在程序结束前 */
  24. [backcolor=transparent]    aos_http_io_deinitialize[backcolor=transparent]();
  25. [backcolor=transparent]    [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]0[backcolor=transparent];
  26. [backcolor=transparent]}

[backcolor=transparent]注:
  • 如果想使用https,只需要设置endpoint时,前缀使用https://即可。
  • 支持多线程,但是aos_http_io_initialize和aos_http_io_deinitialize只需要在主线程里面调用即可,其他线程不需要调用。
  • 如果想设置oss c sdk底层libcurl通信时的一些参数,可以对请求选项中的ctl进行设置,实现控制诸如数据上传最低速度、连接超时时间、DNS缓存失效时间等目的。
  • 您也可以通过ctl获得使用oss c sdk访问OSS的性能参数。以上传数据为例,用户在上传完数据后可以得到一系列的参数指标,比如开始上传数据的时间start_time,第一字节上传的时间first_byte_time,完成数据上传的时间finish_time。
  • 关于如何设置请求选项,请详见oss c sdk如何设置通信时和CURL相关的一些参数

展开
收起
青衫无名 2017-10-19 10:14:17 1820 分享 版权
0 条回答
写回答
取消 提交回答