准备工作
您需要一个鸿蒙 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 = "<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"; // 设置空间 IDaccessToken.accessToken = "accessToken"; //设置 accessTokenaccessToken.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) {// 异常处理}
其他配置
重试策略配置
// 设置重试间隔时间,默认:1sSMHServiceConfig.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;
并发策略配置
// 设置上传最大并发数。默认:4SMHServiceConfig.sharedConfig().setUploadMaxConcurrentCount(4);// 设置下载最大并发数。默认:4SMHServiceConfig.sharedConfig().setDownloadMaxConcurrentCount(4);
日志配置
// 自定义日志输出回调,用于业务层收集日志QCloudLogger.logOutputCallback = (log: string) => {console.log(log);}// 是否关闭日志:true:关闭, false:打开QCloudLogger.setClose(true);