全部產品
Search
文件中心

Object Storage Service:iOS快速入門

更新時間:Sep 07, 2024

本文介紹如何快速使用OSS iOS SDK完成常見操作,例如建立儲存空間(Bucket)、上傳檔案(Object)、下載檔案等。

前提條件

已安裝iOS SDK。具體操作,請參見安裝

樣本工程

您可以通過查看以下樣本工程,瞭解如何上傳建立儲存空間、本地檔案、下載檔案等操作:

樣本工程用法如下:

  • 複製工程:通過 git clone 擷取樣本工程

  • 配置參數。

  • 啟動本地 STS 鑒權服務。

    • 根據工程sts_local_server目錄中本地鑒權服務指令檔啟動本地STS鑒權伺服器,配置其中的AccessKeyId、AccessKeySecret以及RoleArn參數資訊。

    • 通過Python啟動本機HTTP服務httpserver.py,以便在用戶端代碼中訪問本地服務擷取StsToken.AccessKeyId、StsToken.SecretKey和StsToken.SecurityToken。

運行工程IOS demo得到如下: fig_ios_phpnedemo

範例程式碼

以下示範了在iOS平台以及Mac平台上傳和下載檔案的流程。

  1. 匯入OSS軟體包

    在使用OSS服務前,請先匯入所需的標頭檔。

    #import <AliyunOSSiOS/OSSService.h>                            
  1. 初始化OSSClient

    1. 授權訪問

      OSS支援三種鑒權方式:明文設定、自簽名模式、STS鑒權模式。建議移動端使用STS鑒權模式,詳細配置說明請參見STS鑒權模式

      1. 擷取臨時訪問憑證

        1. 明文設定:直接使用AccessKeyId和AccessKeySecret進行鑒權。

        2. 自簽名模式:產生簽名字串進行鑒權,請參見自簽名模式

        3. STS鑒權模式:使用臨時安全憑證進行鑒權。調用STS服務的AssumeRole介面或使用各語言STS SDK來擷取臨時訪問憑證,請參見使用STS臨時訪問憑證訪問OSS

      2. 使用臨時訪問憑證初始化SDK。

    2. 以下是一個在完整應用程式生命週期中初始化 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執行個體與應用程式的生命週期一致。

  2. 建立儲存空間

    以下代碼用於建立名為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阻塞等待其完成。

  3. 上傳檔案

    以下代碼用於將本地檔案上傳到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];
  4. 下載指定檔案

    以下代碼用於下載指定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];