#放码来战.端云一体化开发#HarmonyOS 5 【农民叔叔】21.【端侧工程】AI诊断预测的病虫害图片上传云存储 原创

鸿花粉H
发布于 2025-6-8 10:49
浏览
0收藏

核心技术点:端云一体化开发的云存储模块。请参见官方文档:

​https://developer.huawei.com/consumer/cn/doc/harmonyos-references/cloudfoundation-cloudstorage​

图片上传流程:将图片复制到缓存区>>开始上传>>监听上传进度>>上传完成后在AGC云存储默认实例中可见图片。

1.初始化

定义云存储默认实例变量、上传回调函数类型

//  云存储实例
const bucket:cloudStorage.StorageBucket=cloudStorage.bucket(); // 默认云存储实例
// 文件上传完成回调
type UploadCompleteCallback=(uploadSuccess:boolean)=>void;

2.复制图片文件

/**
   * 复制文件
   * @param from
   * @param to
   */
  copyFile(from: string, to: string): void {
    let fFile = fileIo.openSync(from);
    let tFile = fileIo.openSync(to, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE); // 替换或创建文件
    fileIo.copyFileSync(fFile.fd, tFile.fd);
    fileIo.closeSync(fFile);
    fileIo.closeSync(tFile);
  }

3.添加图片上传监听

/**
   * 添加上传监听
   * @param task
   * @param completeCallback
   */
  addEventListener(task:request.agent.Task,completeCallback:UploadCompleteCallback){
    task.on('progress',(progress) => {
      // 显示进度条
    });
    task.on('completed',(progress) => {
      completeCallback(true);
    });
    task.on('failed',(progress) => {
      completeCallback(false);
    });
  }

4.获取上传完成后的图片云路径

/**
   * 获取云文件路径
   * @param path
   */
  getImgCloudUrl(path:string):void{
    bucket.getDownloadURL(path)
      .then(async (downloadUrl:string)=>{
        this.cloudImgUrl=downloadUrl;
        // 保存记录到云数据库
        // TODO:
        // /
      })
      .catch((err:BusinessError)=>{})
  }

5.上传图片

/**
   * 上传图片
   * @param imgUri
   */
  uploadImg(imgUri:string):void{
    let fileName=imgUri.split('/').pop() as string;
    let cacheFilePath=`${getContext().cacheDir}/${fileName}`;
    this.copyFile(imgUri,cacheFilePath);
    let cloudPath=`NMSS-PEST/image_${new Date().getTime()}.jpg`;
    bucket.uploadFile(getContext(this),{localPath:cacheFilePath,cloudPath:cloudPath})
      .then((task:request.agent.Task)=>{
        // 监听上传进度
        this.addEventListener(task,this.onUploadCompleted(cacheFilePath,cloudPath));
        task.start();
      })
      .catch((err:BusinessError)=>{
        console.error(err.message);
      })
  }

  /**
   * 上传文件
   * @param imgUri
   * @param cloudPath
   * @param completeCallback
   */
  onUploadCompleted(cacheFilePath:string,cloudPath:string):UploadCompleteCallback{
    return (uploadSuccess:boolean)=>{
      if(uploadSuccess){
        // 获取云文件路径
        this.getImgCloudUrl(cloudPath);
      }
      fileIo.unlink(cacheFilePath);
    }
  }

下一篇:图片上传成功完成后,保存病虫害其他信息到云数据库


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐