鸿蒙Next如何实现oss批量上传图片

在鸿蒙Next开发中,如何实现批量上传多张图片到阿里云OSS?官方文档中只看到单文件上传的示例,但实际业务需要同时处理几十张图片,有没有完整的代码示例或最佳实践?需要注意哪些性能优化点(比如并发控制、进度回调)?求分享具体实现思路!

2 回复

鸿蒙Next批量上传图片到OSS?简单!用@ohos.request发起多任务,搭配FormData塞入图片数组,再循环调用OSS的SDK。记得加进度条,不然用户以为卡了——毕竟程序员的时间观念和用户不一样,1秒等于一年呢!

更多关于鸿蒙Next如何实现oss批量上传图片的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中实现OSS批量上传图片,可以通过以下步骤实现:

1. 添加依赖

build-profile.json5中添加OSS SDK依赖:

"dependencies": {
  "ohos/aliyun-oss-ohos-sdk": "^2.9.11"
}

2. 配置权限

module.json5中添加网络权限:

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

3. 核心实现代码

import oss from '@ohos/aliyun-oss-ohos-sdk';
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

class OSSUploader {
  private client: oss;

  constructor(context: common.Context) {
    // 初始化OSS客户端
    const config = {
      endpoint: 'your-endpoint', // 替换为实际endpoint
      credential: {
        accessKeyId: 'your-accessKeyId',
        accessKeySecret: 'your-accessKeySecret',
        securityToken: '' // 使用STS时填写
      }
    };
    this.client = oss.createInstance(context, config);
  }

  // 批量上传方法
  async batchUploadImages(imageUris: string[], bucketName: string): Promise<void> {
    const uploadPromises = imageUris.map((imageUri, index) => {
      return this.uploadSingleImage(imageUri, bucketName, `images/${Date.now()}_${index}.jpg`);
    });

    try {
      await Promise.all(uploadPromises);
      console.log('所有图片上传完成');
    } catch (error) {
      console.error('批量上传失败:', error);
    }
  }

  // 单张图片上传
  private async uploadSingleImage(imageUri: string, bucketName: string, objectKey: string): Promise<void> {
    try {
      const file = fs.openSync(imageUri, fs.OpenMode.READ_ONLY);
      const stat = fs.statSync(imageUri);
      
      await this.client.put(
        bucketName,
        objectKey,
        {
          file: file,
          contentLength: stat.size
        }
      );
      
      fs.closeSync(file);
      console.log(`图片上传成功: ${objectKey}`);
    } catch (error) {
      console.error(`图片上传失败 ${objectKey}:`, error);
      throw error;
    }
  }
}

// 使用示例
// 在Ability中调用
let uploader = new OSSUploader(this.context);
let imageUris = [
  'file://media/Photos/image1.jpg',
  'file://media/Photos/image2.jpg',
  'file://media/Photos/image3.jpg'
];

uploader.batchUploadImages(imageUris, 'your-bucket-name');

4. 关键说明

  • 初始化配置:需要正确的OSS endpoint和认证信息
  • 文件路径:使用鸿蒙的文件URI格式
  • 错误处理:单个文件失败不影响其他文件上传
  • 命名策略:使用时间戳避免文件名冲突

5. 注意事项

  • 确保网络权限已授权
  • 大文件建议使用分片上传
  • 生产环境建议使用STS临时凭证
  • 注意处理上传进度和结果回调

这样即可实现高效的OSS批量图片上传功能。

回到顶部