上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)

上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)

下面是监听和上传的代码

let upProgressCallback = (uploadedSize: number, totalSize: number) => {
  if(onProgress != undefined){
    onProgress(uploadedSize,totalSize);
  }
};

let upCompleteCallback = (taskStates: Array<request.TaskState>) => {
  for (let i = 0; i < taskStates.length; i++) {
    console.info("upOnComplete taskState:" + JSON.stringify(taskStates[i]));
  }
};

let upFailCallback = (taskStates: Array<request.TaskState>) => {
  for (let i = 0; i < taskStates.length; i++) {
    LogUtil.info("upFailCallback taskState:" + JSON.stringify(taskStates[i]));
  }
};

let headerCallback = (headerResponse: object) => {
  LogUtil.info('headerCallback');
  LogUtil.info(`Upload delete headerReceive notification. header: ${JSON.stringify(headerResponse)}`);
};

let allFiles = Array<request.File>()
let header = {
  'Accept': '*/*',
  'Content-Type':'multipart/form-data',
} as Record<string,string>;

let toKen = UserInfo.getInstance().accessToken;
if(toKen != '' && toKen != undefined){
  let headerToken = "Bearer " + toKen ?? '';
  header['Authorization'] = headerToken;
}

let data: Array<request.RequestData> = [{ name: 'zoom', value: 'zoom' },{name: "side", value: side, }];

allFiles.push({
  name: "image.jpeg",
  filename: "image.jpeg",
  uri: `internal://cache/test.jpeg`,
  type: "image/jpeg"
});

let uploadConfig: request.UploadConfig = {
   url: upUrl,
   header: header,
   method: 'POST',
   files: allFiles,
   data: data,
 };

try {
  request.uploadFile(getContext(), uploadConfig).then((task: request.UploadTask) => {
    WebUtils uploadTask = task;
    WebUtils.uploadTask.on('progress', upProgressCallback);
    WebUtils.uploadTask.on('complete', upCompleteCallback);
    WebUtils uploadTask.on('fail', upFailCallback);
    WebUtils.uploadTask.on('headerReceive',headerCallback);
  }).catch((err: BusinessError) => {
    console.log('发生错误');
    console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`);
    if(WebUtils uploadTask != undefined){
      WebUtils uploadTask.off('progress',upProgressCallback);
      WebUtils.uploadTask.off('complete',upCompleteCallback);
      WebUtils uploadTask.off('fail',upFailCallback);
      WebUtils.uploadTask.off('headerReceive',headerCallback);
    }
    if(onError != undefined && onError !=null){
      onError(err)
    }
  });
} catch (e) {
  console.log('=============== 发生错误 ==============' + JSON.stringify(e));
  if(WebUtils uploadTask != undefined){
    WebUtils uploadTask.off('progress',upProgressCallback);
    WebUtils uploadTask.off('complete',upCompleteCallback);
    WebUtils uploadTask.off('fail',upFailCallback);
    WebUtils.uploadTask.off('headerReceive',headerCallback);
  }
  if(onError != undefined && onError !=null){
    onError(e)
  }
}

每次请求结果都会在 upProgressCallback 收到监听 和 upFailCallback 中收到监听。但是输出 TaskState code 0 message 是空


更多关于上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

问题已解决:文件的key 写错了导致上传失败。

更多关于上传图片时候总是出现问题。按照网上说的将相册中的图片拷贝到本地没有报错,但是上传到进度有监听到数值已上传和未上传相同时就会走到fail的结果中(HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,上传图片时遇到进度监听数值相同导致失败的问题,可能涉及以下几个方面:

  1. 网络请求配置:检查上传请求的配置,确保请求头、请求体等参数正确无误。特别是Content-TypeContent-Length,确保它们与上传文件的实际类型和大小匹配。

  2. 上传逻辑:确认上传逻辑中是否正确处理了上传进度。鸿蒙Next中,上传进度通常通过UploadTaskonProgressUpdate方法监听。确保在进度更新时,逻辑能够正确处理uploadedSizetotalSize的值。

  3. 文件处理:虽然将图片拷贝到本地没有报错,但上传时仍需确保文件路径正确,且文件未被其他进程占用或损坏。检查文件路径是否为绝对路径,并确保文件可读。

  4. 服务器端处理:上传失败可能与服务器端的处理逻辑有关。服务器可能在接收到上传请求后,由于某些原因(如文件大小限制、格式不支持等)拒绝了上传请求。检查服务器日志,确认是否有相关错误信息。

  5. 异常处理:在fail回调中,通常可以获取到具体的错误信息。检查错误码和错误信息,根据信息进一步排查问题。常见的错误码如401(未授权)、403(禁止访问)、500(服务器内部错误)等,可以帮助定位问题。

  6. 日志调试:在关键步骤添加日志输出,特别是在进度监听器和fail回调中,记录上传的进度和错误信息,便于分析问题原因。

  7. API版本兼容性:确认使用的鸿蒙API版本与当前系统版本兼容。某些API在不同版本中可能有行为差异,确保使用的API在当前版本中稳定可用。

通过以上步骤,可以逐步排查上传图片失败的原因,并针对具体问题进行修复。

回到顶部