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

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

文档中心

图片上传流程:将图片复制到缓存区>>开始上传>>监听上传进度>>上传完成后在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);
    }
  }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿花粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值