本文介紹如何快速使用OSS iOS SDK完成常見操作,例如建立儲存空間(Bucket)、上傳檔案(Object)、下載檔案等。
前提條件
已安裝iOS SDK。具體操作,請參見安裝。
樣本工程
您可以通過查看以下樣本工程,瞭解如何上傳建立儲存空間、本地檔案、下載檔案等操作:
樣本工程用法如下:
複製工程:通過 git clone 擷取樣本工程。
配置參數。
運行AliyunOSSSwift執行個體前,您需要在OSSSwiftGlobalDefines.swift檔案中配置必要參數。
運行AliyunOSSSDK前,您需要在OSSTestMacros.h檔案中配置必要參數。
啟動本地 STS 鑒權服務。
根據工程sts_local_server目錄中本地鑒權服務指令檔啟動本地STS鑒權伺服器,配置其中的AccessKeyId、AccessKeySecret以及RoleArn參數資訊。
通過Python啟動本機HTTP服務httpserver.py,以便在用戶端代碼中訪問本地服務擷取StsToken.AccessKeyId、StsToken.SecretKey和StsToken.SecurityToken。
運行工程IOS demo得到如下:
範例程式碼
以下示範了在iOS平台以及Mac平台上傳和下載檔案的流程。
匯入OSS軟體包
在使用OSS服務前,請先匯入所需的標頭檔。
#import <AliyunOSSiOS/OSSService.h>
初始化OSSClient
授權訪問
OSS支援三種鑒權方式:明文設定、自簽名模式、STS鑒權模式。建議移動端使用STS鑒權模式,詳細配置說明請參見STS鑒權模式。
擷取臨時訪問憑證
明文設定:直接使用AccessKeyId和AccessKeySecret進行鑒權。
自簽名模式:產生簽名字串進行鑒權,請參見自簽名模式。
STS鑒權模式:使用臨時安全憑證進行鑒權。調用STS服務的AssumeRole介面或使用各語言STS SDK來擷取臨時訪問憑證,請參見使用STS臨時訪問憑證訪問OSS。
使用臨時訪問憑證初始化SDK。
以下是一個在完整應用程式生命週期中初始化 OSSClient 的範例程式碼:
@interface AppDelegate () @property (nonatomic, strong) OSSClient *client; @end /** * 擷取sts資訊的url,配置在業務方自己的搭建的伺服器上。 */ #define OSS_STS_URL @"oss_sts_url" /** * bucket所在的region的endpoint。 */ #define OSS_ENDPOINT @"your bucket's endpoint" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // 初始化OSSClient執行個體 [self setupOSSClient]; return YES; } - (void)setupOSSClient { // 初始化具有自動重新整理的provider id<OSSCredentialProvider> credentialProvider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STS_URL]; // client端的配置,如逾時時間,開啟dns解析等等 OSSClientConfiguration *cfg = [[OSSClientConfiguration alloc] init]; client = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:credentialProvider clientConfiguration:cfg]; }
說明如果您的應用只用到一個訪問網域名稱和資料中心下的bucket,建議保持OSSClient執行個體與應用程式的生命週期一致。
建立儲存空間
以下代碼用於建立名為examplebucket的儲存空間。
// 構建建立Bucket的請求。 OSSCreateBucketRequest * create = [OSSCreateBucketRequest new]; // 設定儲存空間名稱為examplebucket。 create.bucketName = @"examplebucket"; // 設定存取權限為私人。 create.xOssACL = @"private"; // 設定儲存類型為低頻訪問類型IA。 create.storageClass = OSSBucketStorageClassIA; OSSTask * createTask = [client createBucket:create]; [createTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"create bucket success!"); } else { NSLog(@"create bucket failed, error: %@", task.error); } return nil; }]; // 實現阻塞等待任務完成。 // [createTask waitUntilFinished];
說明SDK的所有操作都會返回
OSSTask
,您可以為OSSTask
設定延續動作,等待其非同步完成,也可以通過調用waitUntilFinished
阻塞等待其完成。上傳檔案
以下代碼用於將本地檔案上傳到OSS。
OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // 填寫Bucket名稱,例如examplebucket。 put.bucketName = @"examplebucket"; // 填寫Object完整路徑。Object完整路徑中不能包含Bucket名稱,例如exampledir/testdir/exampleobject.txt。 put.objectKey = @"exampledir/testdir/exampleobject.txt"; put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"]; // put.uploadingData = <NSData *>; // 直接上傳NSData。 // 直接上傳NSData。 put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend); }; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"upload object success!"); } else { NSLog(@"upload object failed, error: %@" , task.error); } return nil; }]; // 實現阻塞等待任務完成。 // [putTask waitUntilFinished];
下載指定檔案
以下代碼用於下載指定OSS檔案到本地檔案。
OSSGetObjectRequest * request = [OSSGetObjectRequest new]; // 填寫Bucket名稱,例如examplebucket。 request.bucketName = @"examplebucket"; // 填寫Object完整路徑。Object完整路徑中不能包含Bucket名稱,例如exampledir/testdir/exampleobject.txt。 request.objectKey = @"exampledir/testdir/exampleobject.txt"; request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) { NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); }; OSSTask * getTask = [client getObject:request]; [getTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"download object success!"); OSSGetObjectResult * getResult = task.result; NSLog(@"download result: %@", getResult.downloadedData); } else { NSLog(@"download object failed, error: %@" ,task.error); } return nil; }]; // 實現阻塞等待任務完成。 // [task waitUntilFinished];