鸿蒙Next multipartbody.part上传如何实现

在鸿蒙Next开发中,如何使用MultipartBody.Part实现文件上传功能?能否提供具体的代码示例,说明如何构建请求体并处理服务器响应?包括参数设置和异常处理的注意事项。

2 回复

鸿蒙Next里用multipartbody.part上传文件?简单!就像拼乐高一样:

  1. 创建MultipartBody.Part对象
  2. 塞进RequestBody里
  3. 往接口一扔

代码示例:

val filePart = MultipartBody.Part.createFormData(
    "file", 
    filename, 
    RequestBody.create(MediaType.parse("image/*"), file)
)

搞定!记得处理权限和异常,不然会“翻车”哦~ 🚗💨

更多关于鸿蒙Next multipartbody.part上传如何实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,实现multipart/form-data上传需要使用multipartbody.part来构建请求体。以下是具体实现步骤和示例代码:

1. 添加网络权限

module.json5中添加权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

2. 创建MultipartBody.Part

import http from '@ohos.net.http';
import fileIo from '@ohos.file.fs';

// 创建文本字段Part
function createFormField(name: string, value: string): http.MultipartBody.Part {
  return http.MultipartBody.Part.createFormDataPart(name, value);
}

// 创建文件字段Part
async function createFilePart(name: string, filePath: string): Promise<http.MultipartBody.Part> {
  let file = await fileIo.open(filePath, fileIo.OpenMode.READ_ONLY);
  let fileStat = await fileIo.stat(filePath);
  
  return http.MultipartBody.Part.createFilePart(
    name, 
    file, 
    fileStat.size,
    'image/jpeg' // 根据实际文件类型修改
  );
}

3. 构建请求并执行上传

async function uploadMultipart() {
  let httpRequest = http.createHttp();
  
  // 创建MultipartBody
  let multipartBody = new http.MultipartBody([
    await createFormField('description', '示例文件'),
    await createFilePart('file', 'path/to/your/file.jpg')
  ]);

  try {
    let response = await httpRequest.request(
      'https://your-upload-url.com/upload',
      {
        method: http.RequestMethod.POST,
        header: {
          'Content-Type': 'multipart/form-data'
        },
        extraData: multipartBody
      }
    );
    
    console.log('Response:', response.result);
  } catch (error) {
    console.error('Upload failed:', error);
  } finally {
    httpRequest.destroy();
  }
}

关键点说明:

  • 使用MultipartBody.Part.createFormDataPart创建文本字段
  • 使用MultipartBody.Part.createFilePart创建文件字段
  • 文件需要先通过fileIo.open打开获取FD(文件描述符)
  • 必须正确设置Content-Type为multipart/form-data
  • 文件上传完成后会自动关闭文件流

注意事项:

  • 确保文件路径有效且具有读取权限
  • 根据实际文件类型设置正确的MIME类型
  • 大文件上传建议使用分块上传方式
  • 在生产环境中需要添加进度回调和处理错误

这样就完成了鸿蒙Next中的multipart上传实现。

回到顶部