上传文件至HarmonyOS 鸿蒙Next

发布于 1周前 作者 sinazl 来自 鸿蒙OS

上传文件至HarmonyOS 鸿蒙Next 鸿蒙里如何上传文件,有具体demo吗

3 回复

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5

这边提供一个上传文件的demo,注意当前上传文件必须上传沙箱中cache文件夹中的文件

demo:

import request from '@ohos.request';
import picker from '@ohos.file.picker';
import fs, { ReadOptions } from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

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

@Entry
@Component
struct Index4 {
  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('Content-Type', 'multipart/form-data');
    header.set('key2', 'value2');

    for (let i = 0; i < paths.length; i++) {
      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, uploadTask) => {
        if(uploadTask) {
          uploadTask.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)
    }
  }
}

更多关于上传文件至HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


是不是只有真机才能获取照片,

在HarmonyOS(鸿蒙)Next系统中上传文件,具体操作依赖于你所使用的应用或开发环境。以下是一个基本的文件上传流程概述,不涉及Java或C语言相关内容:

  1. 文件选择

    • 用户需在设备中选择要上传的文件。这通常通过文件管理器或应用内嵌的文件选择器完成。
  2. 文件权限

    • 确保应用具有访问选定文件的权限。HarmonyOS强调用户隐私和数据安全,因此应用需明确请求并获取必要的权限。
  3. 文件读取

    • 应用读取选定文件的内容,可能涉及文件读取API或库函数。
  4. 上传接口

    • 应用需调用上传接口,该接口可能是应用服务器提供的REST API,或其他形式的网络接口。
    • 上传过程中,可能需要处理HTTP请求、文件编码、错误处理等。
  5. 上传状态

    • 应用应向用户反馈上传进度和状态,如上传成功、失败或进行中。
  6. 错误处理

    • 应用应能够处理上传过程中可能出现的各种错误,如网络问题、文件损坏等。

如果上述流程在你的具体场景中遇到问题,可能是由于应用实现细节、网络状况或HarmonyOS版本差异导致的。此时,建议直接查阅HarmonyOS的官方文档或开发者指南,获取更具体的指导和API参考。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部