开发者社区> 问答> 正文

iOS-SDK之如何实现管理文件?


罗列Bucket所有Object

  1. OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
  2. getBucket.bucketName = @"<bucketName>";
  3. // 可选参数,具体含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/bucket&GetBucket
  4. // getBucket.marker = @"";
  5. // getBucket.prefix = @"";
  6. // getBucket.delimiter = @"";
  7. OSSTask * getBucketTask = [client getBucket:getBucket];
  8. [getBucketTask continueWithBlock:^id(OSSTask *task) {
  9.     if (!task.error) {
  10.         OSSGetBucketResult * result = task.result;
  11.         NSLog(@"get bucket success!");
  12.         for (NSDictionary * objectInfo in result.contents) {
  13.             NSLog(@"list object: %@", objectInfo);
  14.         }
  15.     } else {
  16.         NSLog(@"get bucket failed, error: %@", task.error);
  17.     }
  18.     return nil;
  19. }];

罗列操作具体可设置的参数名称和作用如下:
名称作用
delimiter用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素: CommonPrefixes。
marker设定结果从marker之后按字母排序的第一个开始返回。
maxkeys限定此次返回object的最大数,如果不设定,默认为100,maxkeys取值不能大于1000。
prefix限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。


检查文件是否存在


SDK提供了同步接口检测某个指定Object是否在OSS上:
  1. NSError * error = nil;
  2. BOOL isExist = [client doesObjectExistInBucket:TEST_BUCKET withObjectKey:@"file1m" withError:&error];
  3. if (!error) {
  4.     if(isExist) {
  5.         NSLog(@"File exists.");
  6.     } else {
  7.         NSLog(@"File not exists.");
  8.     }
  9. } else {
  10.     NSLog(@"Error!");
  11. }


复制Object

  1. OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
  2. copy.bucketName = @<bucketName>;
  3. copy.objectKey = @"<objectKey>";
  4. copy.sourceCopyFrom = [NSString stringWithFormat:@"/%@/%@", @"<bucketName>, @"<objectKey_copyFrom>"];
  5. OSSTask * task = [client copyObject:copy];
  6. [task continueWithBlock:^id(OSSTask *task) {
  7.     if (!task.error) {
  8.         // ...
  9.     }
  10.     return nil;s
  11. }];

上述代码实现了CopyObject,注意:
  • 源Object和目标Object必须属于同一个数据中心。
  • 如果拷贝操作的源Object地址和目标Object地址相同,可以修改已有Object的meta信息。
  • 拷贝文件大小不能超过1G,超过1G需使用Multipart Upload操作。


删除Object


下面代码实现了DeleteObject,要求对所在的Bucket有写权限。
  1. OSSDeleteObjectRequest * delete = [OSSDeleteObjectRequest new];
  2. delete.bucketName = @"<bucketName>";
  3. delete.objectKey = @"<objectKey>";
  4. OSSTask * deleteTask = [client deleteObject:delete];
  5. [deleteTask continueWithBlock:^id(OSSTask *task) {
  6.     if (!task.error) {
  7.         // ...
  8.     }
  9.     return nil;
  10. }];
  11. // [deleteTask waitUntilFinished];


只获取Object的Meta信息


下面代码用于获取Object的元信息:
  1. OSSHeadObjectRequest * head = [OSSHeadObjectRequest new];
  2. head.bucketName = @"<bucketName>";
  3. head.objectKey = @"<objectKey>";
  4. OSSTask * headTask = [client headObject:head];
  5. [headTask continueWithBlock:^id(OSSTask *task) {
  6.     if (!task.error) {
  7.         OSSHeadObjectResult * headResult = task.result;
  8.         NSLog(@"all response header: %@", headResult.httpResponseHeaderFields);
  9.         // some object properties include the 'x-oss-meta-*'s
  10.         NSLog(@"head object result: %@", headResult.objectMeta);
  11.     } else {
  12.         NSLog(@"head object error: %@", task.error);
  13.     }
  14.     return nil;
  15. }];

展开
收起
青衫无名 2017-10-18 14:41:57 1826 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
聚划算iOS平台动态化方案LuaView 立即下载
滴滴出行iOS端瘦身实践 立即下载
一个跨平台的云服务SDK需要什么 立即下载