快速入门

  1. 初始化BOSClient。

    BOSClient是与BOS服务交互的客户端,BOS iOS SDK的BOS操作都是通过BOSClient完成的。

    示例代码:

    BCECredentials* credentials = [[BCECredentials alloc] init];
    // access key和secret key分别代表AKSK。
    credentials.accessKey = @"<access key>";
    credentials.secretKey = @"<secret key>";
    
    BOSClientConfiguration* configuration = [[BOSClientConfiguration alloc] init];
    configuration.endpoint = @"https://bj.bcebos.com";
    configuration.credentials = credentials;
    
    BOSClient* client = [[BOSClient alloc] initWithConfiguration:configuration];
    
  2. 新建一个Bucket。

    Bucket是BOS上的命名空间,相当于数据的容器,可以存储若干数据实体(Object)。在您上传数据前,必须先创建一个Bucket。

    示例代码:

    BCETask* task = [client putBucket:@"<bucketName>"];
    
    // 任务可以异步执行。
    task.then(^(BCEOutput* output) {
      // 可以在block内判断任务执行的结果。
      if (output.response) {
          // 任务执行成功。
      }
    
      if (output.error) {
          // 任务执行失败。
      }
    
      if (output.progress) {
          // 任务执行进度。
      }
    });
    
    // 可以同步方式,等待任务执行完毕。
    [task waitUtilFinished];
    
  3. 上传Object。

    Object是BOS中最基本的数据单元,您可以把Object简单的理解为文件。

    示例代码:

    BOSObjectContent* content = [[BOSObjectContent alloc] init];
    // 以下两行设置一种。
    content.objectData.file = @"<FilePath>";
    content.objectData.data = <NSData object>;
    
    BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
    request.bucket = @"<bucketname>";
    request.key = @"<ObjectName>";
    request.objectContent = content;
    
    __block BOSPutObjectResponse* response;
    BCETask* task = [client putObject:request];
    task.then(^(BCEOutput* output) {
        if (output.progress) {
            // 打印进度
            NSLog(@"put object progress is %@", output.progress);
        }
    
        if (output.response) {
            response = (BOSPutObjectResponse*)output.response;
            // 打印eTag
            NSLog(@"The eTag is %@", response.metadata.eTag);
        }
    
        if (output.error) {
            NSLog(@"put object failure with %@", output.error);
        }
    });
    
  4. 查看Bucket下的Object列表。

    当您完成一系列上传后,可以参考如下代码来查看Bucket下的全部Object。

    示例代码:

    // 获取指定Bucket下的所有Object信息
    BOSListObjectsRequest* request = [[BOSListObjectsRequest alloc] init];
    request.bucket = @"<bucketname>";
    
    __block BOSListObjectsResponse* response = nil;
    BCETask* task = [client listObjects:request];
    task.then(^(BCEOutput* output) {
      if (output.response) {
          response = (BOSListObjectsResponse*)output.response;
          for (BOSObjectInfo* object in response.contents) {
             NSLog(@"The object key is %@", object.key);
          }
      }
    
      if (output.error) {
          NSLog(@"list objects failure with %@", output.error);
      }
    });
    
  5. 获取指定Object

    用户可以参考如下代码来实现对一个或者多个Object的获取。

    示例代码:

    BOSGetObjectRequest* request = [[BOSGetObjectRequest alloc] init];
    request.bucket = @"<bucketname>";
    request.key = @"<Objectname>";
    request.file = @"<filename>";
    
    __block BOSGetObjectResponse* response = nil;
    BCETask* task = [self.client getObject:request];
    task.then(^(BCEOutput* output) {
        // ...
    });
    

完整示例

#import <BaiduBCEBasic/BaiduBCEBasic.h>
    #import <BaiduBCEBOS/BaiduBCEBOS.h>

    void example(void) {
    // 初始化
    BCECredentials* credentials = [[BCECredentials alloc] init];
    credentials.accessKey = @"<access key>";
    credentials.secretKey = @"<secret key>";
    BOSClientConfiguration* configuration = [[BOSClientConfiguration alloc] init];
    configuration.credentials = credentials;

    BOSClient* client = [[BOSClient alloc] initWithConfiguration:configuration];

    // 1. 新建bucket
    BCETask* task = [client putBucket:@"<bucketName>"];
    task.then(^(BCEOutput* output) { // 任务可以异步执行。
        if (output.response) {
            // 任务执行成功。
        }

        if (output.error) {
            // 任务执行失败。
        }

        if (output.progress) {
            // 任务执行进度。
        }
    });
    [task waitUtilFinished]; // 可以同步方式,等待任务执行完毕。

    // 2. 上传Object
    BOSObjectContent* content = [[BOSObjectContent alloc] init];
    content.objectData.file = @"<FilePath>";

    BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
    request.bucket = @"<bucketname>";
    request.key = @"<Objectname>";
    request.objectContent = content;

    __block BOSPutObjectResponse* response = nil;
  &n