HarmonyOS鸿蒙NEXT中AI诊断预测的病虫害图片上传云存储

HarmonyOS鸿蒙NEXT中AI诊断预测的病虫害图片上传云存储 核心技术点:端云一体化开发的云存储模块。请参见官方文档:

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

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

  1. 初始化

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

// 云存储实例
const bucket:cloudStorage.StorageBucket=cloudStorage.bucket(); // 默认云存储实例
// 文件上传完成回调
type UploadCompleteCallback=(uploadSuccess:boolean)=>void;
  1. 复制图片文件
/**
 * 复制文件
 * @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);
}
  1. 添加图片上传监听
/**
 * 添加上传监听
 * @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);
  });
}
  1. 获取上传完成后的图片云路径
/**
 * 获取云文件路径
 * @param path
 */
getImgCloudUrl(path:string):void{
  bucket.getDownloadURL(path)
    .then(async (downloadUrl:string)=>{
      this.cloudImgUrl=downloadUrl;
      // 保存记录到云数据库
      // TODO
      /
    })
    .catch((err:BusinessError)=>{})
}
  1. 上传图片
/**
 * 上传图片
 * @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);
  }
}

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


更多关于HarmonyOS鸿蒙NEXT中AI诊断预测的病虫害图片上传云存储的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS NEXT中,AI诊断预测的病虫害图片可通过云存储服务上传。使用分布式文件系统接口或云服务SDK,图片数据经AI分析后存储至云端。开发时调用OHOS的云存储API,需配置正确的访问权限和存储路径。图片上传采用断点续传和加密传输机制,确保数据安全性和可靠性。云存储服务与AI诊断模块解耦,通过事件通知机制实现结果回调。上传的图片会进行格式校验和大小限制,建议压缩至合理尺寸。

更多关于HarmonyOS鸿蒙NEXT中AI诊断预测的病虫害图片上传云存储的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS NEXT中实现病虫害图片上传云存储的方案设计合理,核心流程完整。针对代码实现有几个优化建议:

  1. 文件操作建议增加错误处理:
copyFile(from: string, to: string): void {
  try {
    let fFile = fileIo.openSync(from);
    let tFile = fileIo.openSync(to, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
    fileIo.copyFileSync(fFile.fd, tFile.fd);
  } catch (err) {
    console.error(`文件操作失败: ${err.message}`);
  } finally {
    fileIo.closeSync(fFile);
    fileIo.closeSync(tFile);
  }
}
  1. 云存储路径建议使用更规范的命名:
const cloudPath = `pest_detection/${new Date().toISOString()}_${Math.random().toString(36).substring(2,8)}.jpg`;
  1. 上传进度监听可增加百分比计算:
task.on('progress', (progress) => {
  const percent = Math.round((progress.loaded / progress.total) * 100);
  // 更新UI进度显示
});

整体实现符合HarmonyOS云存储最佳实践,后续可结合云数据库实现完整的病虫害记录管理。

回到顶部