获取Object
更新时间:2025-04-01
简单的获取Object
用户可以通过如下代码将Object读取到内存中。
基本流程
- 创建BosClient类的实例。
- 执行BosClient getObject方法,会返回GetObjectResult实例。
- 访问GetObjectResult实例的data属性,获取数据。
示例代码
Plain Text
1let getObjectResult: GetObjectResult;
2try {
3 getObjectResult = await bosClient.getObject(bucketName, objectName);
4 logger.info(`get object success, etag:${JSON.stringify(getObjectResult.etag)}`);
5 // 获取实际的数据
6 let data = getObjectResult.data as ArrayBuffer;
7} catch (bosResponse) {
8 logger.error(`errCode: ${bosResponse.error.code}`)
9 logger.error(`requestId: ${bosResponse.error.requestId}`)
10 logger.error(`errMessage: ${bosResponse.error.message}`)
11 logger.error(`statusCode: ${bosResponse.statusCode}`)
12}
注意:
- GetObjectResult中存储了object的数据信息(
data
)以及元数据信息(userMeta
、contentType
等)- 该操作为下载整个object,由于底层使用API的限制,如果object总长度需小于5MB
完整代码
Plain Text
1import { logger, Credential, BosClient, ClientOptions} from "bos"
2import { GetObjectResult } from "bos/src/main/ets/bos/api/DataType"
3
4let credential = new Credential(AccessKeyID, SecretAccessKey, Token); //STS返回的临时AK/SK及Token
5let clientOptions = new ClientOptions();
6clientOptions.endpoint = "bj.bcebos.com"; //传入Bucket所在区域域名
7let bosClient = new BosClient(credential, clientOptions); // 创建BosClient
8let bucketName = "test-harmony-bucket";
9let objectName = "test-object";
10
11let getObjectResult: GetObjectResult;
12try {
13 getObjectResult = await bosClient.getObject(bucketName, objectName);
14 logger.info(`get object success, etag:${JSON.stringify(getObjectResult.etag)}`);
15 // 获取实际的数据处理
16 let data = getObjectResult.data as ArrayBuffer;
17} catch (bosResponse) {
18 logger.error(`errCode: ${bosResponse.error.code}`)
19 logger.error(`requestId: ${bosResponse.error.requestId}`)
20 logger.error(`errMessage: ${bosResponse.error.message}`)
21 logger.error(`statusCode: ${bosResponse.statusCode}`)
22}
下载Object的一部分内容
基本流程
- 创建BosClient类的实例。
- 执行BosClient getObject方法,并指定ranges参数
- 访问GetObjectResult实例的data属性,获取数据。
示例代码
Plain Text
1//返回第0到第100个字节的数据,包括第100个
2let ranges = [0, 100];
3try {
4 getObjectResult = await bosClient.getObject(bucketName, objectName, ranges);
5 let data = getObjectResult.data as ArrayBuffer
6 logger.info(`get object success, ranges : 0 - 100 , return length:${JSON.stringify(data.byteLength)} `);
7} catch (bosResponse) {
8 logger.error(`errCode: ${bosResponse.error.code}`)
9 logger.error(`requestId: ${bosResponse.error.requestId}`)
10 logger.error(`errMessage: ${bosResponse.error.message}`)
11 logger.error(`statusCode: ${bosResponse.statusCode}`)
12}
说明:用户可以用此功能实现文件的分段下载和断点续传,当object总大小超过5MB时必须指定ranges分多次下载才能成功。
获取object的元数据信息
基本流程
- 创建BosClient类的实例。
- 执行BosClient.getObjectMeta方法,获取ObjectMeta实例。
- 访问ObjectMeta实例中的contentLength、userMeta、storageClass等方法获取不同的元数据信息
示例代码
Plain Text
1let objectMeta: ObjectMeta;
2try {
3 objectMeta = await bosClient.getObjectMeta(bucketName, objectName);
4 logger.info(`get object meta success, info : ${JSON.stringify(objectMeta)}`);
5} catch (bosResponse) {
6 logger.error(`errCode: ${bosResponse.error.code}`)
7 logger.error(`requestId: ${bosResponse.error.requestId}`)
8 logger.error(`errMessage: ${bosResponse.error.message}`)
9 logger.error(`statusCode: ${bosResponse.statusCode}`)
10}
获取文件的下载链接
您可以通过如下代码获取指定Object的URL,该功能通常用于您将Object的URL临时分享给其他用户的场景。
基本流程
- 创建BosClient类的实例。
- 执行BosClient generatePresignedUrl方法。
- 返回一个object的URL。
示例代码
Plain Text
1let expire = 1800;
2try {
3 let url = await bosClient.generatePresignedUrl(bucketName, objectName, expire);
4 logger.info(`url: ${url}`);
5} catch (bosResponse) {
6 logger.error(`errCode: ${bosResponse.error.code}`)
7 logger.error(`requestId: ${bosResponse.error.requestId}`)
8 logger.error(`errMessage: ${bosResponse.error.message}`)
9 logger.error(`statusCode: ${bosResponse.statusCode}`)
10}
说明: expire为指定的URL有效时长,时间从当前时间算起,为可选参数,不配置时系统默认值为1800秒。
下载大文件到指定路径
基本流程
- 创建BosClient类的实例。
- 执行BosClient downloadSuperFile方法。
完整代码
Plain Text
1import fs from '@ohos.file.fs';
2import { logger, Credential, BosClient, ClientOptions } from "bos"
3
4let credential = new Credential(AccessKeyID, SecretAccessKey, Token); //STS返回的临时AK/SK及Token
5let clientOptions = new ClientOptions();
6clientOptions.endpoint = "bj.bcebos.com"; //传入Bucket所在区域域名
7let bosClient = new BosClient(credential, clientOptions); // 创建BosClient
8let bucketName = "test-harmony-bucket";
9let objectName = "superfile.txt";
10
11
12let cacheDir = getContext().cacheDir;
13let path = cacheDir + '/test.txt';
14
15// download
16try {
17 await bosClient.downloadSuperFile(bucketName, objectName, path + ".copy");
18 let stat = fs.lstatSync(path + ".copy");
19 logger.info(`download super file success, filesize : ${stat.size}`);
20} catch (bosResponse) {
21 logger.error(`errCode: ${bosResponse.error.code}`)
22 logger.error(`requestId: ${bosResponse.error.requestId}`)
23 logger.error(`errMessage: ${bosResponse.error.message}`)
24 logger.error(`statusCode: ${bosResponse.statusCode}`)
25}
说明: 该方法使用单线程通过多次http请求,每次下载5MB,把大文件下载到本地。