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