开发者社区 问答 正文

iOS-SDK之如何实现 管理Bucket?


创建bucket

  1. OSSCreateBucketRequest * create = [OSSCreateBucketRequest new];
  2. create.bucketName = @"<bucketName>";
  3. create.xOssACL = @"public-read";
  4. create.location = @"oss-cn-hangzhou";
  5. OSSTask * createTask = [client createBucket:create];
  6. [createTask continueWithBlock:^id(OSSTask *task) {
  7.     if (!task.error) {
  8.         NSLog(@"create bucket success!");
  9.     } else {
  10.         NSLog(@"create bucket failed, error: %@", task.error);
  11.     }
  12.     return nil;
  13. }];

上述代码在创建bucket时,指定了Bucket的ACL和所在的数据中心。
  • 每个用户的Bucket数量不能超过30个。
  • 每个Bucket的名字全局唯一,也就是说创建的Bucket不能和其他用户已经在使用的Bucket同名,否则会创建失败。
  • 创建的时候可以选择Bucket ACL权限,如果不设置ACL,默认是private。
  • 创建成功结果返回Bucket所在数据中心。


罗列所有bucket

  1. OSSGetServiceRequest * getService = [OSSGetServiceRequest new];
  2. OSSTask * getServiceTask = [client getService:getService];
  3. [getServiceTask continueWithBlock:^id(OSSTask *task) {
  4.     if (!task.error) {
  5.         OSSGetServiceResult * result = task.result;
  6.         NSLog(@"buckets: %@", result.buckets);
  7.         NSLog(@"owner: %@, %@", result.ownerId, result.ownerDispName);
  8.         [result.buckets enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  9.             NSDictionary * bucketInfo = obj;
  10.             NSLog(@"BucketName: %@", [bucketInfo objectForKey:@"Name"]);
  11.             NSLog(@"CreationDate: %@", [bucketInfo objectForKey:@"CreationDate"]);
  12.             NSLog(@"Location: %@", [bucketInfo objectForKey:@"Location"]);
  13.         }];
  14.     }
  15.     return nil;
  16. }];

上处代码返回请求者拥有的所有Bucket。
  • 匿名访问不支持该操作。


罗列bucket中的文件

  1. OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
  2. getBucket.bucketName = @"<bucketName>";
  3. // getBucket.marker = @"";
  4. // getBucket.prefix = @"";
  5. // getBucket.delimiter = @"";
  6. OSSTask * getBucketTask = [client getBucket:getBucket];
  7. [getBucketTask continueWithBlock:^id(OSSTask *task) {
  8.     if (!task.error) {
  9.         OSSGetBucketResult * result = task.result;
  10.         NSLog(@"get bucket success!");
  11.         for (NSDictionary * objectInfo in result.contents) {
  12.             NSLog(@"list object: %@", objectInfo);
  13.         }
  14.     } else {
  15.         NSLog(@"get bucket failed, error: %@", task.error);
  16.     }
  17.     return nil;
  18. }];

上述代码罗列了Bucket中的文件
  • 罗列操作必须具备访问该Bukcet的权限。
  • 罗列时,可以通过prefix,marker,delimiter和max-keys对list做限定,返回部分结果。


删除bucket

  1. OSSDeleteBucketRequest * delete = [OSSDeleteBucketRequest new];
  2. delete.bucketName = @"<bucketName>";
  3. OSSTask * deleteTask = [client deleteBucket:delete];
  4. [deleteTask continueWithBlock:^id(OSSTask *task) {
  5.     if (!task.error) {
  6.         NSLog(@"delete bucket success!");
  7.     } else {
  8.         NSLog(@"delete bucket failed, error: %@", task.error);
  9.     }
  10.     return nil;
  11. }];

上述代码删除了一个Bucket。
  • 只有Bucket的拥有者才能删除这个Bucket。
  • 为了防止误删除的发生,OSS不允许用户删除一个非空的Bucket。

展开
收起
青衫无名 2017-10-18 14:43:10 1813 分享 版权
阿里云 AI 助理回答

您提供的代码示例是使用Objective-C语言通过阿里云对象存储服务(OSS)的SDK来执行Bucket操作的。下面是对这些操作的简要说明和补充信息:

创建Bucket

OSSCreateBucketRequest *create = [OSSCreateBucketRequest new];
create.bucketName = @"您的Bucket名称";
create.xOssACL = @"public-read";
create.location = @"oss-cn-hangzhou";
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;
}];
  • 说明: 这段代码用于创建一个新的Bucket,指定了Bucket的访问控制列表(ACL)为public-read,意味着Bucket内的所有对象默认可被公开读取。同时指定了Bucket所在的区域为中国杭州(oss-cn-hangzhou)。请确保替换@"您的Bucket名称"为一个全局唯一的名称。

罗列所有Bucket

OSSGetServiceRequest *getService = [OSSGetServiceRequest new];
OSSTask *getServiceTask = [client getService:getService];
[getServiceTask continueWithBlock:^id(OSSTask *task) {
    // ... 省略的代码与之前相同
}];
  • 说明: 此代码块用于获取当前账号下所有的Bucket信息,包括Bucket名称、创建日期和位置等。

罗列Bucket中的文件

OSSGetBucketRequest *getBucket = [OSSGetBucketRequest new];
getBucket.bucketName = @"您的Bucket名称";
// ... 可以设置更多参数如prefix来过滤结果
OSSTask *getBucketTask = [client getBucket:getBucket];
[getBucketTask continueWithBlock:^id(OSSTask *task) {
    // ... 代码逻辑与之前类似
}];
  • 说明: 该段代码用于列出指定Bucket中的所有对象(文件)。可以通过设置prefixmarkerdelimiter等参数来实现分页或筛选特定前缀的对象。

删除Bucket

OSSDeleteBucketRequest *delete = [OSSDeleteBucketRequest new];
delete.bucketName = @"您的Bucket名称";
OSSTask *deleteTask = [client deleteBucket:delete];
[deleteTask continueWithBlock:^id(OSSTask *task) {
    // ... 代码逻辑与之前类似
}];
  • 注意: 删除Bucket前,请确认Bucket为空,因为OSS不允许删除非空Bucket。此外,只有Bucket的所有者有权限执行删除操作。

补充提醒

  • 在实际应用中,请确保在执行任何写操作(如创建、删除Bucket)前,已经正确配置了阿里云OSS SDK,并且拥有相应的访问密钥。
  • 对于敏感数据,建议使用更严格的ACL策略,避免设置为public-read
  • 操作过程中遇到问题,可以查看阿里云官方文档或联系阿里云客服获取帮助。
有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答