OSSClient是OSS服务的iOS客户端,它为调用者提供了一系列的方法,可以用来操作,管理存储空间(bucket)和文件(object)等。在使用SDK发起对OSS的请求前,您需要初始化一个OSSClient实例,并对它进行一些必要设置。
确定Endpoint
Endpoint是阿里云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。
设置EndPoint和凭证
移动终端是一个不受信任的环境,把AccessKeyId和AccessKeySecret直接保存在终端用来加签请求,存在极高的风险。建议只在测试时使用明文设置模式,业务应用推荐使用STS鉴权模式或自签名模式,详细请参考:
访问控制、
移动端直传。设置EndPoint和CredentialProvider示例如下:
- NSString *endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
- // 由阿里云颁发的AccessKeyId/AccessKeySecret构造一个CredentialProvider。
- // 移动端建议使用STS方式初始化OSSClient。可以通过sample中STS使用说明了解更多(https://github.com/aliyun/aliyun-oss-ios-sdk/tree/master/DemoByOC)
- id<OSSCredentialProvider> credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"AccessKeyId" secretKeyId:@"AccessKeySecret" securityToken:@"SecurityToken"];
- client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
提示:
设置EndPoint为cname
如果您已经在bucket上绑定cname,将该cname直接设置到endPoint即可。如:
- NSString *endpoint = "http://new-image.xxxxx.com";
- ...
- client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
注意,苹果要求支持ATS标准后,所有Endpoint URL都必须为HTTPS URL,而cname域名暂不支持证书设置,所以暂时不能用cname设置Endpoint。
更多鉴权方式参考:
访问控制
设置网络参数
也可以在初始化的时候设置详细的ClientConfiguration:
- NSString *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
- // 移动端建议使用STS方式初始化OSSClient。更多鉴权模式请参考后面的访问控制章节。
- id<OSSCredentialProvider> credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"AccessKeyId" secretKeyId:@"AccessKeySecret" securityToken:@"SecurityToken"];
- OSSClientConfiguration * conf = [OSSClientConfiguration new];
- conf.maxRetryCount = 3; // 网络请求遇到异常失败后的重试次数
- conf.timeoutIntervalForRequest = 30; // 网络请求的超时时间
- conf.timeoutIntervalForResource = 24 * 60 * 60; // 允许资源传输的最长时间
- client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential clientConfiguration:conf];