快速入门

最近更新时间:2025-09-29 11:21:32

我的收藏

准备工作

您需要一个鸿蒙 NEXT 应用,这个应用可以是现有的工程,也可以是新建的一个空的工程,详情请参见 鸿蒙 NEXT 应用开发指引
请确保您的鸿蒙 NEXT 应用目标为 API 级别12或更高版本。

使用步骤

步骤1:集成 SDK

1. 运行此命令进行 SDK 依赖安装:
ohpm install @tencentcloud/smh_sdk
这将向您工程的 oh-package.json5 添加这样一行依赖代码:
"dependencies": {
...
"@tencentcloud/smh_sdk":"1.0.2"
}
2. SDK 需要网络权限,用于与 COS 服务器进行通信,请在应用模块下的 module.json5 中添加如下权限声明:
...
"requestPermissions":[
{
"name" : "ohos.permission.INTERNET",
...
}
]
...

步骤2:初始化

注意:
控制台 创建媒体库后,控制台会展示为您生成的专属域名,强烈建议您将 SMHServiceConfig.sharedConfig().host 设置为您的专属域名。



// 配置控制台创建媒体库后显示的“访问域名”
SMHServiceConfig.sharedConfig().host = "<libraryId>.api.tencentsmh.cn";

// 配置 accesstoken 刷新回调
SMHAccessTokenProvider.singleProvider().accessRefreshCallBack = <T>(reqeust: SMHAPIRequest<T>) => {
return new Promise(async (resolve, reject) => {
try {
let accessToken = new SMHAccessToken();
accessToken.libraryId = "libraryId"; // 设置媒体库 ID。
accessToken.spaceId = "spaceId"; // 设置空间 ID
accessToken.accessToken = "accessToken"; //设置 accessToken
accessToken.expiresIn = 1800;
resolve(accessToken);
} catch (err) {
}
});
}

步骤3:访问 SMH 服务

1. 上传文件

try {
let filePath = "本地文件路径";
// 调用 SMHFileApis 的 uploadObject 方法进行文件上传
let task = SMHFileApis.uploadObject({
spaceId: "spaceId",
libraryId: "libraryId",
body: filePath, // 本地路径
uploadPath: `smh/test.jpg` // 目标路径
});
task.onStateChange = (state: SMHTransferState) => {
// 任务状态回调
}
task.confirmKeyInitCallback = (confimKey: string) => {
// 上传返回 confirmKey 回调。用于断点续传
}
task.onProgress = (progress) => {
// 进度回调
}
task.onFinish = (result?: object, error?: SMHError) => {
// 完成回调
}
// 启动任务
task.start();

//其他方法
//task.pause() 暂停任务
//task.cancel() 取消任务
//task.resume() 重新启动任务,与 pause 配合使用
}catch (e) {
// 异常处理
}
断点续传
try {
let filePath = "本地文件路径";
// 调用 SMHFileApis 的 uploadObject 方法进行文件上传
let task = SMHFileApis.uploadObject({
spaceId: "spaceId",
libraryId: "libraryId",
body: filePath, // 本地路径
uploadPath: `smh/test.jpg`, // 目标路径
confirmKey:"confirmKey"// confirmKeyInitCallback 回调返回的 confirmKey。
});
task.onStateChange = (state: SMHTransferState) => {
// 任务状态回调
}
task.confirmKeyInitCallback = (confimKey: string) => {
// 上传返回 confirmKey 回调。用于断点续传
}
task.onProgress = (progress) => {
// 进度回调
}
task.onFinish = (result?: object, error?: SMHError) => {
// 完成回调
}
// 启动任务
task.start();

//其他方法
//task.pause() 暂停任务
//task.cancel() 取消任务
//task.resume() 重新启动任务,与 pause 配合使用
}catch (e) {
// 异常处理
}

2. 下载文件

说明:
下载接口默认支持断点续传,确保写入本地路径不变即可。
try {
// 调用 SMHFileApis 的 downloadObject 方法进行文件上传
let task = SMHFileApis.downloadObject({
spaceId: "spaceId",
libraryId: "libraryId",
filePath: `smh/test.jpg`,// 远端路径
savePath: "本地路径" // 本地路径
})
task.onStateChange = (state: SMHTransferState) => {
// 任务状态回调
}
task.onProgress = (progress: HttpProgress) => {
// 进度回调
}
task.onFinish = (result?: object, error?: SMHError) => {
// 完成回调
}
// 启动任务
task.start();
//其他方法
//task.pause() 暂停任务
//task.cancel() 取消任务
//task.resume() 重新启动任务,与 pause 配合使用
} catch (e) {
// 异常处理
}

3. 其他请求

// 列出文件夹所有文件
try {
let result = await SMHDirectoryApis.listDirectory({
libraryId:"libraryId",
spaceId:"spaceId",
dirPath:'',
limit:'10',
orderBy:SMHFileListOrderBy.name,
orderByType:SMHOrderByType.asc,
withFavoriteStatus:true,
withInode:true
});
}catch (e) {
// 异常处理
}

// 创建文件夹
try {
let result = await SMHDirectoryApis.createDirectory({
libraryId:"libraryId",
spaceId:"spaceId",
dirPath:'path',
withInode:true
});
}catch (e) {
// 异常处理
}

// 删除文件夹
try {
let result = await SMHDirectoryApis.deleteDirectory({
libraryId:"libraryId",
spaceId:"spaceId",
dirPath:'path'});
}catch (e) {
// 异常处理
}

其他配置

重试策略配置

// 设置重试间隔时间,默认:1s
SMHServiceConfig.sharedConfig().retrySleep = 1 * 1000;
// 设置重试次数,默认:3次
SMHServiceConfig.sharedConfig().maxRetryCount = 3;

超时时间配置

// 读取超时时间。单位为毫秒(ms),默认为 30 * 1000ms。
SMHServiceConfig.sharedConfig().readTimeout = 30 * 1000;
// 连接超时时间。单位为毫秒(ms),默认为 15 * 1000ms。
SMHServiceConfig.sharedConfig().connectTimeout = 15 * 1000;

并发策略配置

// 设置上传最大并发数。默认:4
SMHServiceConfig.sharedConfig().setUploadMaxConcurrentCount(4);
// 设置下载最大并发数。默认:4
SMHServiceConfig.sharedConfig().setDownloadMaxConcurrentCount(4);

日志配置

// 自定义日志输出回调,用于业务层收集日志
QCloudLogger.logOutputCallback = (log: string) => {
console.log(log);
}
// 是否关闭日志:true:关闭, false:打开
QCloudLogger.setClose(true);