初始化
快速入门
- 初始化一个带有STS验证的BosClient。
BosClient是与BOS服务交互的客户端,BOS Harmony SDK的BOS操作都是通过BosClient完成的。示例代码:
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
说明:Harmony SDK主要用于移动端开发的场景,移动端是一个不受信任的环境,把AccessKeyId和SecretAccessKey直接保存在终端用来加签请求,存在极高的风险。故推荐您使用STS鉴权模式。STS的详细介绍请参考临时授权访问。
- 新建一个Bucket.
Bucket是BOS上的命名空间,相当于数据的容器,可以存储若干数据实体(Object)。在您上传数据前,必须先创建一个Bucket。示例代码:
let location: string;
let bucketName = "test-bucket-harmony";
try {
location = await bosClient.putBucket(<bucketName>);
logger.info(`create bucket success, location:${location}`);
} catch (bosResponse) { // 创建bucket失败
printErrorInfo(bosResponse, "put bucket error"); // 打印错误信息
}
- 上传Object。
Object是BOS中最基本的数据单元,您可以把Object简单的理解为文件。对于一个简单的Object的上传,BOS提供了二进制串上传的方式。示例代码:
let cacheDir = getContext().cacheDir;
let path = cacheDir + '/test.txt';
let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE | fs.OpenMode.TRUNC)
fs.writeSync(file.fd, "Hello BOS");
fs.fsyncSync(file.fd);
fs.closeSync(file.fd);
file = fs.openSync(path, fs.OpenMode.READ_ONLY); // 使用同步的方式打开文件
let stat = fs.lstatSync(path); //获取文件的信息
let buf = new ArrayBuffer(stat.size); //构造ArrayBuffer
fs.readSync(file.fd, buf); // 读取文件内容
fs.fsyncSync(file.fd);
fs.closeSync(file.fd);
let etag: string;
try {
etag = await bosClient.putObject(<bucketName>, <objectName>, buf); //上传object
logger.info(`put object success, etag:${etag}`); // 打印etag
} catch (bosResponse) {
printErrorInfo(bosResponse, "put object fail");
}
- 查看Bucket下的Object列表。
当您完成一系列上传后,可以参考如下代码来查看Bucket下的全部Object。示例代码:
let listObjectsResult: ListObjectsResult;
try {
listObjectsResult = await bosClient.listObjects(<bucketName>);
// 遍历所有Object
for (let objectInfo of listObjectsResult.contents as ObjectSummaryType[]) {
logger.info(`name: ${objectInfo.key} size: ${objectInfo.size} storageClass: ${objectInfo.storageClass}`);
}
-
获取指定的Object.
用户可以参考如下代码来实现对一个或者多个Object的获取。示例代码:
let getObjectResult: GetObjectResult;
try { // 注意: 当前接口仅支持下载不超过5MB的Object
getObjectResult = await bosClient.getObject(, );
logger.info(`get object success, etag:${JSON.stringify(getObjectResult.etag)}`);
} catch (bosResponse) {
printErrorInfo(bosResponse, "get object fail");
}
完整示例
import fs from '@ohos.file.fs';
import { logger, Credential, BosClient, ClientOptions} from "bos"
import { BosResponse } from "bos/src/main/ets/bos/model/BosResponse"
// 下文中所有返回结果的类都在这个路径下
import { GetObjectResult, ObjectSummaryType, ListObjectsResult, ListObjectsArgs } from "bos/src/main/ets/bos/api/DataType
function printErrorInfo(bosResponse: BosResponse, prefix: string) {
logger.error(`${prefix}, info: ${JSON.stringify(bosResponse.error)}`);
}
export async function fastStart() {
let AccessKeyID = ""
let SecretAccessKey = ""
let Token = ""
let objectName = "test-object"
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-bucket-harmony";
let location: string;
try {
location = await bosClient.putBucket(bucketName);
logger.info(`create bucket success, location:${location}`);
} catch (bosResponse) { // 创建bucket失败
printErrorInfo(bosResponse, "put bucket error"); // 打印错误信息
}
// 创建一个临时文件
let cacheDir = getContext().cacheDir;
let path = cacheDir + '/test.txt';
let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE | fs.OpenMode.TRUNC)
fs.writeSync(file.fd, "Hello BOS");
fs.fsyncSync(file.fd);
fs.closeSync(file.fd);
file = fs.openSync(path, fs.OpenMode.READ_ONLY); // 使用同步的方式打开文件
let stat = fs.lstatSync(path); //获取文件的信息
let buf = new ArrayBuffer(stat.size); //构造ArrayBuffer
fs.readSync(file.fd, buf); // 读取文件内容
fs.fsyncSync(file.fd);
fs.closeSync(file.fd);
let etag: string;
try {
etag = await bosClient.putObject(bucketName, objectName, buf); //上传object
logger.info(`put object success, etag:${etag}`); // 打印etag
} catch (bosResponse) {
printErrorInfo(bosResponse, "put object fail");
}
let args = new ListObjectsArgs();
let listObjectsResult: ListObjectsResult;
try {
listObjectsResult = await bosClient.listObjects(bucketName, args);
// 遍历所有Object
for (let objectInfo of listObjectsResult.contents as ObjectSummaryType[]) {
logger.info(`name: ${objectInfo.key} size: ${objectInfo.size} storageClass: ${objectInfo.storageClass}`);
}
} catch (bosResponse) {
printErrorInfo(bosResponse, "list objects error");
}
let getObjectResult: GetObjectResult;
try {
getObjectResult = await bosClient.getObject(bucketName, objectName);
logger.info(`get object success, etag:${JSON.stringify(getObjectResult.etag)}`);
} catch (bosResponse) {
printErrorInfo(bosResponse, "get object fail");
}
}
配置BosClient
如果您需要配置BosClient的一些细节的参数,可以在构造BosClient的时候传入ClientOptions对象。 ClientOptions是BOS服务的配置类,可以通过ClientOptions对基本网络参数进行设置。
-
示例代码
let clientOptions = new ClientOptions(); //创建ClientOptions对象 clientOptions.calcMd5On = true; //上传object的时候本地计算MD5 clientOptions.endpoint = "bj.bcebos.com"; // 设置域名 clientOptions.multiPartSize = 6164480; //分块上传的时候每一块的大小
- 参数说明
参数 | 说明 |
---|---|
endpoint | BOS服务在各个区域的域名地址 |
userAgent | 用户代理,指HTTP的User-Agent头 |
signExpireSeconds | 签名有效时长,单位是s |
connectTimeout | 建立连接的超时时间(单位:毫秒),缺省值为10000 |
multiPartSize | 分块大小,默认是5242880 |
calcMd5On | 上传object的时候是否在本地计算MD5值,默认是false。注意:设置为true时将会增加上传的时间消耗 |
配置HTTPS协议访问BOS
endpoint设置为
https://开头即可
-
示例代码
let clientOptions = new ClientOptions(); //创建ClientOptions对象 clientOptions.endpoint = "https://bj.bcebos.com"; // 设置域名