HarmonyOS鸿蒙Next中有什么方案是相当于安卓okhttp3的MultipartBody.Builder()方式构建请求体的?

HarmonyOS鸿蒙Next中有什么方案是相当于安卓okhttp3的MultipartBody.Builder()方式构建请求体的?

/**

  • 获取Body参数

  • @param bodyParams 请求体Map

  • @return body */ protected MultipartBody getRequestBody(List<MultipartType> bodyParams) { // 创建一个RequestBody,用add添加键值对 MultipartBody.Builder formEncodingBuilder = new MultipartBody.Builder(); formEncodingBuilder.setType(MultipartBody.FORM);

    // 添加请求参数,遍历map中所有参数到builder if (CommonUtils.isEmptyList(bodyParams)) { return formEncodingBuilder.build(); }

    for (MultipartType multipartType : bodyParams) { // 非文件类型 if (!multipartType.isFile()) { formEncodingBuilder.addFormDataPart(multipartType.getKey(), multipartType.getValue()); continue; }

     // 文件类型
     formEncodingBuilder.addFormDataPart(multipartType.getKey(), multipartType.getValue(),
         RequestBody.create(MediaType.parse("application/octet-stream"), multipartType.getFile()));
    

    }

    // 构建请求体 return formEncodingBuilder.build(); }

比如上面这段代码,鸿蒙ArkTS中要怎么实现呢?


更多关于HarmonyOS鸿蒙Next中有什么方案是相当于安卓okhttp3的MultipartBody.Builder()方式构建请求体的?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

[mkd]
楼主看下RCP请求的MultipartForm能否满足需求,参考示例基于RCP的文件上传与下载
[/mkd]

更多关于HarmonyOS鸿蒙Next中有什么方案是相当于安卓okhttp3的MultipartBody.Builder()方式构建请求体的?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以使用HttpRequest.Builder类来构建请求体。类似于安卓的MultipartBody.Builder(),鸿蒙提供了FormData类来实现多部分表单数据的构建。你可以通过FormDataaddFormDataPart方法来添加表单字段和文件数据,然后将FormData对象作为请求体传递给HttpRequest.Builder

在HarmonyOS Next中,可以使用http模块的FormData类来实现类似okhttp3的MultipartBody.Builder功能。以下是ArkTS的实现方式:

import http from '@ohos.net.http';
import fileio from '@ohos.fileio';

function getRequestBody(bodyParams: Array<MultipartType>): http.RequestBody {
  let formData = new http.FormData();
  
  if (!bodyParams || bodyParams.length === 0) {
    return formData;
  }

  for (let item of bodyParams) {
    if (!item.isFile) {
      formData.append(item.key, item.value);
    } else {
      let file = fileio.openSync(item.filePath);
      let fileBody = http.RequestBody.create(file, 'application/octet-stream');
      formData.append(item.key, item.value, fileBody);
    }
  }

  return formData;
}

关键点说明:

  1. 使用FormData类来构建multipart请求体
  2. 对于普通字段使用append(key, value)方法
  3. 对于文件字段使用append(key, value, fileBody)方法
  4. 文件需要先通过fileio模块打开,然后创建RequestBody

注意:实际使用时需要根据具体业务场景调整文件处理逻辑和错误处理。

回到顶部