HarmonyOS鸿蒙Next中HTTP上传图片失败如何解决

HarmonyOS鸿蒙Next中HTTP上传图片失败如何解决

【问题现象】

网络请求使用request.uploadFile方法上传图片时,上传失败后台没有收到图片。

图片的地址是/data/app/el2/100/base/com.xxxx/haps/entry/cache/1.jpg,后台接口报错提示The current request is not a multipart request

【背景知识】

UploadConfig的File属性:文件的本地存储路径。

仅支持"internal"协议类型,仅支持"internal://cache/",即调用方(即传入的context)对应的缓存路径context.cacheDir。示例:internal://cache/path/to/file.txt

【定位思路】

  1. 检查request.UploadConfig参数设置是否正确,本地发送是否成功;
  2. 检查服务器日志,是否收到请求,文件接收方式是否正确。

问题代码如下:

static uploadImage (context : Context, uri : string)
{
  let uploadConfig: request.UploadConfig = {
    url: 'http://xxx', // 服务器地址
    header: {
      'Content-Type': 'multipart/form-data',
    },
    method: 'POST',
    files: [{
      filename: "1",
      name: "1",
      uri: "1.jpg",
      type: "jpg"
    }],
    data: [],
  };
  console.info(`upload uploadConfig 1 : ` + uploadConfig.files.toString());
  request.uploadFile(context, uploadConfig)
    .then((data: request.UploadTask) => {
      const uploadTask = data;
      console.info(`upload complete taskState 1 : ${JSON.stringify(data[0])}`);
      let headerCallback = (headers: object) => {
        console.info(`upOnHeader headres: ` + JSON.stringify(headerCallback));
      };
      uploadTask.on('headerReceive', headerCallback);
    }).catch((err: BusinessError) => {
    console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`);
  })
}

【解决方案】

file路径配置不正确,"internal"协议类型应该基于haps/entry目录开始写后面的相对路径,比如internal://cache/xxx.txt

let uploadConfig: request.UploadConfig = {
  .....
  files: [{
    filename: "1",
    name: "1",
    uri: "internal://cache/1.jpg",
    type: "jpg"
  }],
  data: [],
};

点击放大

【总结】

对于文件上传,需要同时保证客户端调用方式的正确和服务端接口的正常,特别需要关注UploadConfig的files属性,需要注意传入的文件路径。

仅支持"internal"协议类型,仅支持"internal://cache/",即调用方(即传入的context)对应的缓存路径context.cacheDir


更多关于HarmonyOS鸿蒙Next中HTTP上传图片失败如何解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中HTTP上传图片失败如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,HTTP上传图片失败可能由以下几个原因导致:

  1. 网络问题:检查设备网络连接是否正常,确保网络稳定且能够访问目标服务器。

  2. URL或路径错误:确认上传图片的URL或路径是否正确,包括服务器地址、端口号、路径等。

  3. 权限问题:确保应用具有访问网络和存储的权限。在config.json文件中,检查是否已正确配置ohos.permission.INTERNETohos.permission.READ_MEDIA等权限。

  4. 请求头设置:确保HTTP请求头中包含了正确的Content-Type,通常为multipart/form-data,并且边界(boundary)设置正确。

  5. 图片格式或大小:检查图片格式是否被服务器支持,以及图片大小是否在服务器允许的范围内。

  6. 服务器配置:确认服务器端配置是否允许接收和处理上传的图片,包括文件大小限制、允许的文件类型等。

  7. 代码逻辑:检查上传图片的代码逻辑,确保没有逻辑错误导致上传失败。

  8. 调试信息:查看日志或调试信息,获取更详细的错误信息,帮助定位问题。

  9. API版本兼容性:确保使用的鸿蒙API版本与当前系统版本兼容。

  10. 第三方库问题:如果使用了第三方库进行HTTP请求,检查库的版本和兼容性,确保其支持鸿蒙系统。

通过逐一排查以上可能的原因,可以定位并解决HTTP上传图片失败的问题。

回到顶部