鸿蒙Next如何封装华为云OBS上传功能

在鸿蒙Next开发中,如何封装华为云OBS的文件上传功能?目前官方文档对具体实现描述较少,想请教以下几个问题:

  1. 是否需要单独集成OBS SDK?还是鸿蒙已内置相关接口?
  2. 上传进度监听和断点续传该如何实现?
  3. 有没有完整的代码示例可以参考?
  4. 在权限配置和网络请求方面有哪些特别注意的点?
2 回复

鸿蒙Next封装华为云OBS上传?简单!先引入OBS SDK,再写个工具类,把上传逻辑塞进去。记得处理异步回调,别让用户等得花儿都谢了。最后封装成组件,调用时一行代码搞定,优雅得像用筷子吃薯条!

更多关于鸿蒙Next如何封装华为云OBS上传功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中封装华为云OBS上传功能,可以通过以下步骤实现:

1. 添加依赖

build-profile.json5dependencies中添加OBS SDK:

"dependencies": {
  "huawei-obs-sdk": "^3.23.12"
}

2. 权限配置

module.json5中声明网络权限:

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  }
]

3. 核心封装类

import obs from '@hw-obs/obs-sdk';
import fs from '@ohos.file.fs';

export class OBSUploader {
  private client: any;
  
  constructor(accessKey: string, secretKey: string, endpoint: string) {
    this.client = new obs({
      access_key_id: accessKey,
      secret_access_key: secretKey,
      server: endpoint
    });
  }

  async uploadFile(bucket: string, objectKey: string, filePath: string): Promise<void> {
    try {
      const file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
      const stat = fs.statSync(filePath);
      
      await this.client.putObject({
        Bucket: bucket,
        Key: objectKey,
        Body: file,
        ContentLength: stat.size
      });
      
      fs.closeSync(file);
      console.log('文件上传成功');
    } catch (error) {
      console.error('上传失败:', error);
      throw new Error(`OBS上传失败: ${error.message}`);
    }
  }

  // 上传字节数组
  async uploadBytes(bucket: string, objectKey: string, data: Uint8Array): Promise<void> {
    await this.client.putObject({
      Bucket: bucket,
      Key: objectKey,
      Body: data
    });
  }
}

4. 使用示例

// 初始化
const uploader = new OBSUploader(
  'your-access-key',
  'your-secret-key',
  'https://obs.cn-north-4.myhuaweicloud.com'
);

// 上传文件
await uploader.uploadFile('my-bucket', 'images/photo.jpg', '/data/storage/el2/base/haps/pic.jpg');

// 上传二进制数据
const bytes = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
await uploader.uploadBytes('my-bucket', 'data/bytes.bin', bytes);

关键说明:

  1. 认证信息:需要提前在华为云申请AccessKey
  2. 端点地址:根据OBS区域选择对应endpoint
  3. 错误处理:建议在实际使用中添加重试机制
  4. 文件权限:确保应用有读取本地文件的权限

这种封装提供了基础的上传功能,实际使用时可根据需要扩展进度回调、分片上传等特性。

回到顶部