HarmonyOS 鸿蒙Next: fileUpload进度onprogress只有在开始和上传完成时候才会回调回来

HarmonyOS 鸿蒙Next: fileUpload进度onprogress只有在开始和上传完成时候才会回调回来 我们使用request.uploadFile上传文件时候,上传可以成功, 回调也正常回调,但是只在上传开始和上传结束后才会回调回来,导致进度条只有0%和100%两种状态

3 回复

111,

基本信息

<div>
    <h1>标题</h1>
    <p>这是一段描述。</p>
    <img src="" alt="空图片">
    <p>这是另一段描述。</p>
</div>

更多关于HarmonyOS 鸿蒙Next: fileUpload进度onprogress只有在开始和上传完成时候才会回调回来的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


参考如下demo:

// 获取应用文件路径
let context = this as common.UIAbilityContext;
let cacheDir = context.cacheDir;

@Entry
struct page {

  private openPhotoPicker() {
    let photoPicker = new picker.PhotoViewPicker();
    photoPicker.select({
      MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
      maxSelectNumber: 1
    }, (error, result) => {
      if (result) {
        result.photoUris.forEach(uri => {

          let file = fs.openSync(uri, fs.OpenMode.CREATE);
          // 复制文件到缓存目录下
          fs.copyFileSync(file.fd, cacheDir + '/test.jpeg')

          this.uploadImage(['internal://cache/test.jpeg']);
        })
      }
    });
  }

  private uploadImage(paths: string[]) {
    let allFiles = Array<request.File>()
    let header = new Map<Object, string>();
    header.set('key1', 'value1');
    header.set('key2', 'value2');
    for (let i = 0; i <paths.length; i++) {
      let path = paths;
      allFiles[i] = {
        name: "image" + i + ".jpeg",
        filename: "image" + i + ".jpeg",
        uri: paths[i],
        type: "image"
      }
    }
    let data: Array<request.RequestData> = [{ name: 'name', value: 'value' }];
    let uploadConfig: request.UploadConfig = {
      url: "http://XXX",
      header: header,
      method: 'POST',
      files: allFiles,
      data: data
    }

    try {
      request.uploadFile(getContext(this), uploadConfig, (error, response) => {
        if(response) {
          response.on('progress', (uploadedSize: number, totalSize: number) => {
            console.log("progress, uploadedSize: " + uploadedSize + ", totalSize: " + totalSize)
          })
        } else {
          console.log("upload failure: " + error)
        }
      });
    } catch (error) {
      console.log("upload failure: " + error)
    }
  }

  build() {
  }
}

在HarmonyOS鸿蒙Next中,fileUploadonprogress回调在文件上传过程中仅在开始和上传完成时触发,中间过程不会触发。这是由于系统设计上的优化,减少了频繁的回调调用,以降低性能开销。如果需要实时监控上传进度,可以考虑使用其他方法或API来实现。

回到顶部