获取Object
更新时间:2022-10-21
简单的获取Object
用户可以通过如下代码将Object读取到内存中。
基本流程
- 创建BOSClient类的实例。
- 执行BOSClient getObject方法,会返回BOSGetObjectResponse实例。
- 访问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的一部分内容
基本流程
- 创建BOSGetObjectRequest类的实例。
- BOSGetObjectRequestt实例的rangeStart和/或rangeEnd字段。
- 执行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下载到指定路径。
基本流程
- 创建BOSGetObjectRequest类的实例。
- 设置要保存的文件名到BOSGetObjectRequest实例的file字段。
- 执行client getObject操作。
- 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临时分享给其他用户的场景。
基本流程
- 创建BOSClient类的实例。
- 执行BOSClient generatePresignedUrl方法。
- 返回一个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);
}
}