本文介绍使用OSS Media-C SDK的常见问题及解决方法。

OSS Media-C SDK和OSS C SDK有怎样的联系?

OSS Media-C SDK依赖于OSS C SDK,OSS Media-C SDK中的上传和下载等功能是通过调用OSS C SDK的接口实现的。

OSS Media-C SDK是否支持Windows?

目前还不支持。

是否支持追加写文件?

支持,调用oss_media_file_open时使用“a”模式,然后通过多次调用oss_media_file_write接口实现追加写。

什么是role arn?如何获取role arn?

  • role arn表示需要扮演角色的id。
  • 您可以在RAM访问控制管理控制台,选择RAM角色管理,然后单击已经创建的角色名称。在基本信息区域中查看ARN,其值格式为acs:ram::xxxx:role/yyyyy。如果还没有已创建的角色,需要在角色管理页面创建一个新的用户角色和其他相应角色,并赋予新的用户角色AliyunSTSAssumeRoleAccess权限,更详细的介绍请参考RAM的文档

如何运行sample?

修改sample/config.c文件,赋予access key id、access key secret、bucket等值,完成编译后在bin目录下可以找到sample的可执行文件。

报错:error:a timeout was reached

检查host的值,是否是类似于oss-cn-hangzhou.aliyuncs.com的值。这是C SDK的一个已知问题,会在后期版本修复。

运行sample时报错:error:Couldn't resolve host name 和[code=-990, message=HttpIoError]

修改sample/config.c文件,配置相关参数值,然后重新编译即可。

客户端和服务端的access key id,access key secret,token配置之间的差异和注意点?

  • 服务端只需要配置access key id和access key secret,这两个值可以是主账号的AccessKey,也可以是主账号生成的子账号的AccessKey。
  • 客户端有两种配置方式:第一种是和服务端一样,只配置主账号或者子账号的access key id、access key secret;第二种是配置access key id、access key secret和token三个值,这三个值都是服务端通过oss_media_get_token或者oss_media_get_token_from_policy获取的临时AccessKey和token,该AccessKey和token有时间期限,超过有效期后,不能再次使用。

执行sample获取token的时候出现以下错误:http_code=500, error_code=GetSTSTokenError, error_message=Internal Error

  • 原因:安装的libcurl不支持HTTPS协议,导致无法访问sts服务。具体过程是机器上没有安装openssl-devel等ssl的开发包,在编译libcurl时找不到ssl,libcurl会自动禁止HTTPS协议,导致编译出来的libcurl库不支持HTTPS,最终访问STS失败。
  • 解决办法:先安装openssl-devel等ssl开发包,然后重新安装libcurl。安装libcurl时执行了./configure后,检查并确认最后一行Protocols里已包含HTTPS。