获取Object
所有文档
menu

对象存储 BOS

获取Object

产品详情自助选购

简单的获取Object

用户可以通过如下代码将Object读取到内存中。

基本流程

  1. 创建BOSClient类的实例。
  2. 执行BOSClient getObject方法,会返回BOSGetObjectResponse实例。
  3. 访问BOSGetObjectResponse示例的objectContent.objectData.data属性,获取数据。

示例代码

__block BOSGetObjectResponse* getObjResponse = nil;
BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
getObjRequest.bucket = @"<bucketname>";
getObjRequest.key = @"<objectname>";
BCETask* task = [client getObject:getObjRequest];
task.then(^(BCEOutput* output) {
  if (output.response) {
      getObjResponse = (BOSGetObjectResponse*)output.response;
      NSLog(@"get object success!");
  }

  if (output.error) {
      NSLog(@"get object failure with %@", outpu****t.error);
  }

  if (output.progress) {
      NSLog(@"the get object progress is %@", output.progress);
  }
});
[task waitUtilFinished];

// 获取内存中的数据
NSData* data = getObjResponse.objectContent.objectData.data;

注意:

  • BOSObjectContent中包含了Object的各种信息,包含Object所在的Bucket、Object的名称、MetaData以及数据存储。
  • BOSObjectMetadata中包含了Object上传时定义的ETag,Http Header以及自定义的元数据。
  • 通过BOSObjectContent的objectData属性,获取到Object的数据。

完整示例

#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 BOSGetObjectResponse* getObjResponse = nil;
    BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
    getObjRequest.bucket = @"<bucketname>";
    getObjRequest.key = @"<objectname>";
    BCETask* task = [client getObject:getObjRequest];
    task.then(^(BCEOutput* output) {
        if (output.response) {
            getObjResponse = (BOSGetObjectResponse*)output.response;
            NSLog(@"get object success!");
        }

        if (output.error) {
            NSLog(@"get object failure with %@", output.error);
        }

        if (output.progress) {
            NSLog(@"the get object progress is %@", output.progress);
        }
    });
    [task waitUtilFinished];

    NSData* data = getObjResponse.objectContent.objectData.data;
}

下载Object的一部分内容

基本流程

  1. 创建BOSGetObjectRequest类的实例。
  2. BOSGetObjectRequestt实例的rangeStart和/或rangeEnd字段。
  3. 执行client getObject操作。

示例代码

__block BOSGetObjectResponse* getObjResponse = nil;
BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
getObjRequest.bucket = @"<bucketname>";
getObjRequest.key = @"<objectname>";

// 获取前100个字节
getObjRequest.rangeStart = @"0";
getObjRequest.rangeEnd = @"99";

BCETask* task = [client getObject:getObjRequest];
task.then(^(BCEOutput* output) {
    if (output.response) {
        getObjResponse = (BOSGetObjectResponse*)output.response;
        NSLog(@"get object success!");
    }

    if (output.error) {
        NSLog(@"get object failure with %@", output.error);
    }

    if (output.progress) {
        NSLog(@"the get object progress is %@", output.progress);
    }
});
[task waitUtilFinished];

NSData* data = getObjResponse.objectContent.objectData.data;

说明:用户可以用此功能实现文件的分段下载和断点续传。

下载Object到指定路径

用户可以通过如下代码直接将Object下载到指定路径。

基本流程

  1. 创建BOSGetObjectRequest类的实例。
  2. 设置要保存的文件名到BOSGetObjectRequest实例的file字段。
  3. 执行client getObject操作。
  4. Object可以直接下载到指定路径。

示例代码

__block BOSGetObjectResponse* getObjResponse = nil;
BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
getObjRequest.bucket = @"<bucketname>";
getObjRequest.key = @"<objectname>";

// 设置保存到的文件路径
getObjRequest.file = @"<file>";

BCETask* task = [client getObject:getObjRequest];
task.then(^(BCEOutput* output) {
    if (output.response) {
        getObjResponse = (BOSGetObjectResponse*)output.response;
        NSLog(@"get object success!");
    }

    if (output.error) {
        NSLog(@"get object failure with %@", output.error);
    }

    if (output.progress) {
        NSLog(@"the get object progress is %@", output.progress);
    }
});
[task waitUtilFinished];

获取Object的storageClass

Object的storage class属性分为STANDARD(标准存储), STANDARD_IA(低频存储)和COLD(冷存储)。

示例代码:

__block BOSGetObjectMetadataResponse* getObjMetaResponse = nil;
BCETask* task = [client getObjectMetadata:@"<bucketname>" objectKey:@"<objectname>"];
task.then(^(BCEOutput* output) {
    if (output.response) {
        getObjMetaResponse = (BOSGetObjectMetadataResponse*)output.response;
        NSString storageClass = getObjMetaResponse.storageClass;
        NSLog(@"get object storageClass success!");
    }

    if (output.error) {
        NSLog(@"get object storageClass failure");
    }
});
[task waitUtilFinished];

只获取ObjectMetadata

通过getObjectMetadata 方法可以只获取 Object metadata 而不获取Object的实体。

示例代码:

__block BOSGetObjectMetadataResponse* getObjMetaResponse = nil;
BCETask* task = [client getObjectMetadata:@"<bucketname>" objectKey:@"<objectname>"];
task.then(^(BCEOutput* output) {
    if (output.response) {
        getObjMetaResponse = (BOSGetObjectMetadataResponse*)output.response;
        NSLog(@"get object metadata success!");
    }

    if (output.error) {
        NSLog(@"get object metadata failure");
    }
});
[task waitUtilFinished];

获取Object的URL

您可以通过如下代码获取指定Object的URL,该功能通常用于您将Object的URL临时分享给其他用户的场景。

基本流程

  1. 创建BOSClient类的实例。
  2. 执行BOSClient generatePresignedUrl方法。
  3. 返回一个Object的URL。

示例代码

__block BOSGeneratePresignedUrlResponse *generateObjetUrlRes = nil;
  BCEOutput_ output = [client generatePresignedUrl:@"<bucketname>" objectKey:@"<objectname>" expirationInSeconds:<ExpirationInSeconds>];
  if (output.response) {
      generateObjetUrlRes = (BOSGeneratePresignedUrlResponse_)output.response;
      NSLog(@"get url success, the usrlstting is : %@", [generateObjetUrlRes.objectUrl absoluteString]);
  }
  if (output.error) {
      NSLog(@"get url failure, error : %@:", output.error);
  }

说明: ExpirationInSeconds为指定的URL有效时长,时间从当前时间算起,为可选参数,不配置时系统默认值为1800秒。如果要设置为永久不失效的时间,可以将ExpirationInSeconds参数设置为 -1,不可设置为其他负数。

完整示例

#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 BOSGeneratePresignedUrlResponse *generateObjetUrlRes = nil;
      BCEOutput* output = [client generatePresignedUrl:@"<bucketname>" objectKey:@"<objectname>" expirationInSeconds:<ExpirationInSeconds>];
    if (output.response) {
    generateObjetUrlRes = 	(BOSGeneratePresignedUrlResponse*)output.response;
    NSLog(@"get url success, the usrlstting is : %@", [generateObjetUrlRes.objectUrl absoluteString]);
    }
    if (output.error) {
    NSLog(@"get url failure, error : %@:", output.error);
    }
}
上一篇
查看Bucket中的Object
下一篇
删除Object