开发环境

  • 设备环境:OpenHarmony 4.1.x 

  • SDK 版本:API 10

  • 开发模型:Stage 模型

  • IDLE: Dev Eco 4.1

 

官方文档

 

踩坑一:后台服务地址

上传文件依赖后台服务器,如果使用本地搭建的服务,是无法访问的,还没试过修改 hosts 文件是否可以。否则就会出现如下错误

img

但是为了方便调试,我还是本地开了一个服务,但是我使用内网穿透工具将本地服务代理到公网,然后使用公网域名实现的调试

 

踩坑二:api 参数

UploadConfig 上传文件的参数错一个都不行!
 
里面有个本地文件上传路径,官方文档也写的比较模糊,这个路径可以通过 context.cacheDir 来获得,


let uploadConfig: request.UploadConfig = {
  url: url, //需要手动替换为真实服务器地址
  header: {
    'Content-Type': 'multipart/form-data',
  },
  method: http.RequestMethod.POST,
  files: [
    {
      filename: "biLog.zip",
      name: "file",
      uri: `internal://cache/biLog.zip`, // 这里路径必须用 cache 路径,官方文档这么要求的
      type: "zip"
    },
  ],
  data: [{
    name: "file", value: "file"
  }],
};

踩坑三; 如何获取后台返回的结果

这里 鸿蒙没有直接把结果返回到 body 中,而是把结果放到了 header 中获取

      try {
        request.uploadFile(context, uploadConfig).then((data: request.UploadTask) => {
          uploadTask = data;

          uploadTask.on('headerReceive', headerCallback);  // 2 , 返回的结果会在 header 中拿到数据
          uploadTask.on('progress', upProgressCallback);  // 1
          uploadTask.on('complete', upCompleteCallback);  // 3
          uploadTask.on('fail', upFailCallback);  // 3

        }).catch((err: BusinessError) => {
          console.log(TAG, `upload Failed to request the upload. Code: ${err.code}, message: ${err.message}`);
          if (callback) {
            callback("error", err);
          }
        });
      } catch (err) {
        console.log(TAG, `upload Failed to request the upload. err: ${JSON.stringify(err)}`);
        if (callback) {
          callback("error", err);
        }
      } finally {

      }
    }

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐