OSSClient是OSS服務的iOS用戶端,為調用者提供了一系列的方法進行操作、管理儲存空間(Bucket)和檔案(Object)等。在使用SDK發起對OSS的請求前,您需要初始化一個OSSClient執行個體,並對OSSClient執行個體進行必要設定。
OSSClient的生命週期需與應用程式的生命週期保持一致。即您需要在應用啟動時建立一個全域的OSSClient,在應用結束時銷毀OSSClient。
初始化OSSClient
移動終端是一個不受信任的環境,把AccessKeyId
和AccessKeySecret
直接儲存在終端用來加簽請求,存在極高的風險。推薦使用STS鑒權模式或自簽名模式。
您可以通過以下多種方式建立OSSClient。
使用STS建立OSSClient
以下代碼用於使用STS建立OSSClient。
// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];
使用自訂網域名建立OSSClient
以下代碼用於使用自訂網域名建立OSSClient。
// yourEndpoint填寫自訂網域名。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider];
專有雲或專有域環境建立OSSClient
以下代碼用於在專有雲或專有域環境建立OSSClient。
// yourEndpoint填寫Bucket所在地區對應的Endpoint。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
// 跳過CNAME解析。
configuration.cnameExcludeList = @[endpoint];
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];
配置OSSClient
ClientConfiguration是OSSClient的配置類,您可通過此類來配置代理、連線逾時、最大串連數等參數。
參數 | 描述 | 方法 |
maxRetryCount | 請求失敗後最大的重試次數。預設3次。 | configuration.maxRetryCount |
maxConcurrentRequestCount | 最大並發數。預設為5。 | configuration.maxConcurrentRequestCount |
enableBackgroundTransmitService | 是否開啟背景工作,預設不開啟。 | configuration.enableBackgroundTransmitService |
backgroundSesseionIdentifier | 自訂後台工作階段識別項,預設值為 | configuration.backgroundSesseionIdentifier |
isHttpdnsEnable | 是否開啟httpDns。
| configuration.isHttpdnsEnable |
timeoutIntervalForRequest | 請求逾時時間,預設15秒。 | configuration.timeoutIntervalForRequest |
timeoutIntervalForResource | 資源逾時時間,預設7天。 | configuration.timeoutIntervalForResource |
proxyHost | Proxy 伺服器主機地址。 | configuration.proxyHost |
proxyPort | Proxy 伺服器連接埠。 | configuration.proxyPort |
userAgentMark | 使用者代理程式中HTTP的User-Agent頭。 | configuration.userAgentMark |
cnameExcludeList | 列表中的元素將跳過CNAME解析。 | configuration.cnameExcludeList |
crc64Verifiable | 是否開啟CRC64校正。取值如下:
| configuration.crc64Verifiable |
isAllowUACarrySystemInfo | 是否允許User-Agent攜帶系統資訊。取值如下:
| configuration.isAllowUACarrySystemInfo |
isFollowRedirectsEnable | 是否開啟HTTP重新導向。取值如下:
| configuration.isFollowRedirectsEnable |
以下代碼用於使用ClientConfiguration配置OSSClient參數。
// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
NSString *endpoint = @"yourEndpoint";
// 從STS服務擷取的臨時存取金鑰(AccessKey ID和AccessKey Secret)。
NSString *accessKeyId = @"yourAccessKeyId";
NSString *accessKeySecret = @"yourAccessKeySecret";
// 從STS服務擷取的安全性權杖(SecurityToken)。
NSString *securityToken = @"yourSecurityToken";
id<OSSCredentialProvider> credentialProvider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:securityToken];
OSSClientConfiguration *configuration = [OSSClientConfiguration new];
// 請求失敗後最大的重試次數。
configuration.maxRetryCount = 3;
// 最大並發數。
configuration.maxConcurrentRequestCount = 3;
// 是否開啟背景工作。
configuration.enableBackgroundTransmitService = YES;
// 自訂後台工作階段識別項。
configuration.backgroundSesseionIdentifier = @"yourBackgroundSesseionIdentifier";
// 是否開啟httpDns。
configuration.isHttpdnsEnable = YES;
// 請求逾時時間。
configuration.timeoutIntervalForRequest = 15;
// 資源逾時時間。
configuration.timeoutIntervalForResource = 24 * 60 * 60;
// Proxy 伺服器主機地址。
configuration.proxyHost = @"yourProxyHost";
// Proxy 伺服器連接埠。
configuration.proxyPort = @8080;
// 使用者代理程式中HTTP的User-Agent頭。
configuration.userAgentMark = @"yourUserAgent";
// 列表中的元素將跳過CNAME解析。
configuration.cnameExcludeList = @[@"yourCname"];
// 是否開啟CRC校正。
configuration.crc64Verifiable = YES;
// 是否允許User-Agent攜帶系統資訊。
configuration.isAllowUACarrySystemInfo = YES;
// 是否開啟HTTP重新導向。
configuration.isFollowRedirectsEnable = NO;
OSSClient *client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credentialProvider clientConfiguration:configuration];
啟用日誌
移動端的使用環境比較複雜,部分地區或某個時段會出現無法正常使用OSS SDK的情況。為了進一步定位開發人員遇到的問題,OSS SDK在開啟日誌記錄功能後,會將日誌資訊記錄在本地。使用OSSClient前完成初始化,並調用如下方法開啟日誌記錄。
// 日誌樣式。
//2017/10/25 11:05:43:863 [Debug]: 第17次:<NSThread: 0x7f8099108580>{number = 3, name = (null)}
//2017/10/25 11:05:43:863 [Debug]: 第15次:<NSThread: 0x7f80976052c0>
//2017/10/25 11:05:43:863 [Debug]: ----------TestDebug------------
// 開啟日誌記錄。
[OSSLog enableLog];
記錄檔儲存在沙箱的Caches/OSSLogs檔案夾內。
您可以自行選擇將檔案上傳至伺服器,或者選擇接入阿里雲Log Service上傳記錄檔。
OSSTask
所有調用API操作均會返回一個OSSTask。
OSSTask * task = [client getObject:get];
設定OSSTask。
為OSSTask設定延續 (continuation) 以實現非同步回調。
[task continueWithBlock: ^(OSSTask *task) { // do something ... return nil; }];
等待OSSTask完成以實現同步回調。
[task waitUntilFinished];