对象存储BOS

    Bucket管理

    新建Bucket

    • 基本流程

      1. 创建BOSClient类的实例。
      2. 执行BOSClient putBucket方法,您需要提供Bucket的名字。
    • 示例代码

      BCETask* task = [client putBucket:@"<bucketname>"]; //新建一个Bucket,指定Bucket名称
    • 完整示例

      #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];
      
      BCETask* task = [client putBucket:@"<bucketName>"];
      task.then(^(BCEOutput* output) { // 任务可以异步执行。
          if (output.response) {
              // 任务执行成功。
          }
      
          if (output.error) {
              // 任务执行失败。
          }
      
          if (output.progress) {
              // 任务执行进度。
          }
      });
      [task waitUtilFinished]; // 可以同步方式,等待任务执行完毕。
      }  

      注意:由于Bucket的名称必须在所有区域中是唯一的,所以需要保证BucketName不与其他所有区域上的BucketName相同。

    查看Bucket列表

    • 基本流程

      1. 创建BOSClient类的实例。
      2. 执行BOSClient listBuckets方法,会返回BOSListBucketResponse类的实例。
      3. 对BOSListBucketResponse类型实例可以进行获取buckets/owner操作。
    • 示例代码

      如下代码可以列出用户所有的Bucket:

      __block BOSListBucketResponse* response = nil;
      BCETask* task = [client listBuckets];
      task.then(^(BCEOutput* output) {
          if (output.response) {
            response = (BOSListBucketResponse*)output.response;
          }
      
          if (output.error) {
          }
      });
      [task waitUtilFinished];

      如下代码可以列出Bucket的Owner:

      BOSBucketOwner* owner = response.owner;

      如下代码可以列出Bucket的Metadata:

      NSArray<BOSBucketSummary*>* buckets = response.buckets;
      for (BOSBucketSummary* bucket in buckets) {
          NSLog(@"bucket name: %@", bucket.name);
          NSLog(@"bucket location: %@", bucket.location);
          NSLog(@"bucket create date: %@", bucket.createDate);
      }
    • 完整示例

      #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];
      
          // 列举Buckets
          __block BOSListBucketResponse* response = nil;
          BCETask* task = [client listBuckets];
          task.then(^(BCEOutput* output) {
              if (output.response) {
                  response = (BOSListBucketResponse*)output.response;
              }
      
              if (output.error) {
              }
          });
          [task waitUtilFinished];
      
          // 获取Owner
          BOSBucketOwner* owner = response.owner;
          NSLog(@"the buckets owner is %@", owner.ownerID);
      
          // 获取Bucket信息
          NSArray<BOSBucketSummary*>* buckets = response.buckets;
          for (BOSBucketSummary* bucket in buckets) {
              NSLog(@"bucket name: %@", bucket.name);
              NSLog(@"bucket location: %@", bucket.location);
              NSLog(@"bucket create date: %@", bucket.createDate);
          }
      }

    判断Bucket是否存在,以及是否有权限访问

    • 基本流程

      1. 创建BOSClient类的实例;
      2. 执行BOSClient headBucket方法;
      3. 当请求无错误发生时,说明Bucket存在且请求者有权限访问。
    • 示例代码

      __block BOSHeadBucketResponse* response = nil;
      BCETask* task = [client headBucket:@"<bucketname>"];
       task.then(^(BCEOutput* output) {
          if (output.response) {
              response = (BOSHeadBucketResponse*)output.response;
              NSLog(@"head bucket success!");
          }
      
        if (output.error) {
            NSLog(@"Bucket not exist or no permission!");
        }
      });
      [task waitUtilFinished];
    • 完整示例

      #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];
      
      __block BOSHeadBucketResponse* response = nil;
      BCETask* task = [client headBucket:@"<bucketname>"];
      task.then(^(BCEOutput* output) {
          if (output.response) {
              response = (BOSHeadBucketResponse*)output.response;
              NSLog(@"head bucket success!");
          }
      
          if (output.error) {
              NSLog(@"Bucket not exist or no permission!");
          }
      });
      [task waitUtilFinished];
      }

    删除Bucket

    • 基本流程

      1. 创建BOSClient类的实例;
      2. 执行BOSClient deleteBucket方法;
      3. 删除失败时会产生错误。
    • 示例代码

      __block BOSDeleteBucketResponse* response = nil;
      BCETask* task = [client deleteBucket:@"<bucketname>"];
      task.then(^(BCEOutput* output) {
        if (output.response) {
            response = (BOSDeleteBucketResponse*)output.response;
            NSLog(@"delete bucket success!");
        }
      
        if (output.error) {
            NSLog(@"delete bucket failure");
        }
      });
      [task waitUtilFinished];

      注意:如果Bucket不为空(即Bucket中有Object和未完成的三步上传Part存在),则Bucket无法被删除,必须清空Bucket后才能成功删除。

    • 完整示例

      #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];
      
      __block BOSDeleteBucketResponse* response = nil;
      BCETask* task = [client deleteBucket:@"<bucketname>"];
      task.then(^(BCEOutput* output) {
          if (output.response) {
              response = (BOSDeleteBucketResponse*)output.response;
              NSLog(@"delete bucket success!");
          }
      
          if (output.error) {
              NSLog(@"delete bucket failure");
          }
      });
      [task waitUtilFinished];
      }

    Bucket权限控制

    设置Bucket的访问权限

    • 基本流程

      1. 创建BOSClient类的实例;
      2. 执行BOSClient putBucketACL方法;
      3. 设置失败时会产生错误。
    • 示例代码

      BOSPutBucketAclRequest* request = [[BOSPutBucketAclRequest alloc] init];
      request.cannedAcl = BOS_ACL_PUBLIC_READ;
      request.bucket = @"<bucketname>";
      
      __block BOSPutBucketAclResponse* response = nil;
      BCETask* task = [client putBucketACL:request];
      task.then(^(BCEOutput* output) {
        if (output.response) {
            response = (BOSPutBucketAclResponse*)output.response;
            NSLog(@"pub bucket acl success!");
        }
      
        if (output.error) {
            NSLog(@"pub bucket acl failure with %@", output.error);
        }
      });
      [task waitUtilFinished];

      说明:cannedAcl 字段可取3个值:PrivatePublicReadPublicReadWrite,它们分别对应相关权限,具体内容可以参考《BOS API文档 使用CannedAcl方式的权限控制》。

    • 完整示例

      #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];
      
      BOSPutBucketAclRequest* request = [[BOSPutBucketAclRequest alloc] init];
      request.cannedAcl = BOS_ACL_PUBLIC_READ;
      request.bucket = @"<bucketname>";
      
      __block BOSPutBucketAclResponse* response = nil;
      BCETask* task = [client putBucketACL:request];
      task.then(^(BCEOutput* output) {
          if (output.response) {
              response = (BOSPutBucketAclResponse*)output.response;
              NSLog(@"pub bucket acl success!");
          }
      
          if (output.error) {
              NSLog(@"pub bucket acl failure with %@", output.error);
          }
      });
      [task waitUtilFinished];
      }

    设置指定用户对Bucket的访问权限

    • 基本流程

      1. 创建BOSClient类的实例。
      2. 执行putBucketACL方法,您需要创建一个BOSPutBucketAclRequest的实例来提供授权用户信息。
      3. 设置失败时会抛出异常。
    • 示例代码

      #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];
          NSArray<NSString*>* grantee = @[
                                          @"<grantee1>",
                                          @"<grantee2>"
                                          ];
      
          NSArray<NSString*>* permission = @[
                                              [BOSGrant permissionToString:BOSBucketGranteePermissionRead],
                                              [BOSGrant permissionToString:BOSBucketGranteePermissionList],
                                              ];
      
          BOSGrant* grant = [[BOSGrant alloc] init];
          grant.granteeIDArray = grantee;
          grant.permission = permission;
          BOSPutBucketAclRequest* request = [[BOSPutBucketAclRequest alloc] init];
          request.acl = [[BOSACL alloc] init];
          request.acl.grantees = @[grant];
          request.bucket = @"<bucketname>";
      
          __block BOSPutBucketAclResponse* response = nil;
          BCETask* task = [client putBucketACL:request];
          task.then(^(BCEOutput* output) {
              if (output.response) {
                  response = (BOSPutBucketAclResponse*)output.response;
                  NSLog(@"pub bucket acl success!");
              }
      
              if (output.error) {
                  NSLog(@"pub bucket acl failure with %@", output.error);
              }	
          });
          [task waitUtilFinished];
      }

      注意:Permission中的权限设置包含三个值:READWRITELISTGetObjectFULL_CONTROL,它们分别对应相关权限,具体内容可以参考《BOS API文档 上传ACL文件方式的权限控制》。

    • 完整示例

      #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];
          NSArray<NSString*>* grantee = @[
          @"<grantee1>",
          @"<grantee2>"
      ];
      
      NSArray<NSString*>* permission = @[
          [BOSGrant permissionToString:BOSBucketGranteePermissionRead],
          [BOSGrant permissionToString:BOSBucketGranteePermissionList],
      ];
      
      BOSGrant* grant = [[BOSGrant alloc] init];
      grant.granteeIDArray = grantee;
      grant.permission = permission;
      BOSPutBucketAclRequest* request = [[BOSPutBucketAclRequest alloc] init];
      request.acl = @[grant];
      request.bucket = @"<bucketname>";
      
      __block BOSPutBucketAclResponse* response = nil;
      BCETask* task = [client putBucketACL:request];
      task.then(^(BCEOutput* output) {
          if (output.response) {
              response = (BOSPutBucketAclResponse*)output.response;
              NSLog(@"pub bucket acl success!");
          }
      
          if (output.error) {
              NSLog(@"pub bucket acl failure with %@", output.error);
          }
      });
      [task waitUtilFinished];
      }
    上一篇
    初始化
    下一篇
    文件管理