HarmonyOS鸿蒙Next中rcp文件流上传接口除了文件流,其它参数怎么传?

HarmonyOS鸿蒙Next中rcp文件流上传接口除了文件流,其它参数怎么传?

//文件上传
export function testUploadFromStream(uploadFilePath: string)
   try{
     //创建session
     const session = rcp.createSession(
       headers:{
       'eip-api-version':'app',
       'Authorization':AUTH_TOKEN,
       'eip-cLient-session':AUTH_TOKEN,
     }
     );
     //根据传入的上传文件的路径打开文件
     const file = fs.openSync(uploadFilePath, fs.OpenMode.READ_ONLY);
     //文件读取流
     const fileStream = new rcp.UploadFromStream(new FdReadStream(file.fd));
     //以流的形式上传数据
     session.uploadFromStream(BaseConstants.HTTP_BASE_URL + BaseConstants.API_PREFIX+"/upload", fileStream).then((resp)=>{
       console.info(`testUploadFromStream response: ${JSON.stringify(resp)}`);
       if (resp && resp.statusCode === 200){
         console.info('testUploadFromStream succeeded.');
       }else {
         console.error(`testUploadFromStream failed.`);
       }
       //完成后关闭文件和session
       fs.closeSync(file.fd);
       session.close();
     }).catch((error:Error)=>{
       console.error(`testUploadFromStream error: ${JsoN.stringify(error)}`);
       fs.closeSync(file.fd);
       session.close();
     })
   }

需要再传入body参数,该怎么办?


更多关于HarmonyOS鸿蒙Next中rcp文件流上传接口除了文件流,其它参数怎么传?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

【解决方案】

开发者您好,RCP 文件流形式上传数据,uploadFromStream接口中不支持body参数,只有2个参数,url(HTTP UPLOADFROMSTREAM请求资源的URL)和uploadFrom(HTTP中从一个输入流中上传数据到服务器的请求),详情可参考官网文档:uploadFromStream

若想在RCP上传时携带其他参数,可使用RCP自定义参数能力,可在SessionConfiguration参数中header进行设置,详情可参考官网文档:SessionConfiguration

更多关于HarmonyOS鸿蒙Next中rcp文件流上传接口除了文件流,其它参数怎么传?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,rcp文件流上传接口的其它参数可通过RequestConfig设置。使用RequestConfig.Builder()构建配置对象,通过addHeader()添加请求头参数,setParams()设置URL查询参数,setBody()传递额外表单数据。文件流通过setData()setDataStream()附加。示例:new RequestConfig.Builder().addHeader("key","value").setParams(params).setData(data).build()

在HarmonyOS Next的RCP(Remote Call Procedure)文件流上传接口中,除了文件流本身,如果需要传递其他参数(如body中的表单字段),可以通过UploadFromStream构造函数的第二个参数metadata来传递。

具体方法如下:

  1. 定义metadata对象:在创建UploadFromStream实例时,第二个参数可以传入一个UploadMetadata对象,用于设置额外的元数据,其中就包括body

  2. 设置body参数:在UploadMetadata中,可以通过body属性来设置需要随文件一起上传的其他参数。这些参数通常以键值对的形式组织。

修改后的代码示例如下:

// 创建文件读取流,并附加metadata
const metadata = {
  body: {
    key1: 'value1', // 其他参数1
    key2: 'value2'  // 其他参数2
  }
};
const fileStream = new rcp.UploadFromStream(new FdReadStream(file.fd), metadata);

// 后续上传调用不变
session.uploadFromStream(url, fileStream).then((resp) => {
  // 处理响应
});

关键点说明

  • metadata 中的 body 对象会被自动编码并随请求发送。
  • 这种方式适用于需要上传文件同时提交附加表单数据的场景,符合常见的multipart/form-data上传规范。
  • 如果服务端需要特定的字段名,请确保body中的键名与服务器期望的字段名一致。

这样,文件流和额外的body参数就能在一次请求中同时上传了。

回到顶部