本文介紹如何快速使用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];