HarmonyOS rcp怎么支持文件分块上传uploadFromStream和fs.createReadStream创建的类型不匹配

我现在分块上传使用如下方法

let rs: fs.ReadStream = fs.createReadStream(this.imagePath, {
  start: offset, // 开启读取的位置
  end: lg // 结束读取的位置
})

let session = rcp.createSession()
let response = await session.uploadFromStream(url, {stream:rs})

但是两者类型不匹配

HarmonyOS
2025-01-10 08:40:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

rcp库能力当前使用request能力可通过transferRange方式截取或执行分片上传场景,官网文档可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5#section10768169134510

示例:

import { hilog } from '@kit.PerformanceAnalysisKit';
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

const TAG: string = 'testTag'


function uploadFileByRequest(url: string, start: number, end: number, filePath: string) {
  //响应数据处理
  const customHttpEventsHandler: rcp.HttpEventsHandler = {
    //上传数据监听
    onUploadProgress: (totalSize: number, transferredSize: number) => {
      hilog.info(0x0000, TAG, "Download progress:", transferredSize, "of", totalSize);
    },
    //数据传输完成监听
    onDataEnd: () => {
      hilog.info(0x0000, TAG, "Data transfer complete");
    },
    //取消监听
    onCanceled: () => {
      hilog.info(0x0000, TAG, "Request/response canceled");
    },
  };
  //TracingConfiguration用于获取请求期间详细信息
  const tracingConfig: rcp.TracingConfiguration = {
    verbose: true,
    collectTimeInfo: true,
    httpEventsHandler: customHttpEventsHandler,
  };

  const securityConfig: rcp.SecurityConfiguration = {
    remoteValidation: "skip",
    certificate: {
      content: "-----BEGIN CERTIFICATE-----\n...",
      type: "PEM",
      key: "-----BEGIN PRIVATE KEY-----\n...", //请根据自身业务选择合适的key
      keyPassword: "your-password",
    },
    serverAuthentication: {
      credential: {
        username: "exampleUser",
        password: "examplePassword",
      },
      authenticationType: "basic",
    },
  };

  //建立session对象
  let session = rcp.createSession({
    //指定与会话关联的HTTP请求的配置
    requestConfiguration: {
      tracing: tracingConfig,
      security: securityConfig
    }
  });
  let customHeader: rcp.RequestHeaders = { cookie: "string" }
  let customContent: rcp.RequestContent = { fileOrPath: filePath }
  let request = new rcp.Request(url, 'POST', customHeader, customContent);
  request.transferRange = { from: start, to: end };
  //发起请求
  session.fetch(request).then(
    (rep: rcp.Response) => {
      hilog.info(0x00000, TAG, '{}内容为%{public}s', '上传情况');
    }
  ).catch((err: BusinessError) => {
    hilog.error(0x0000, TAG, `Response err: Code is ${err.code}, message is ${err.message}`);
  }
  );
}
分享
微博
QQ
微信
回复
2025-01-10 11:14:52
相关问题
p40 phone类型匹配
5198浏览 • 1回复 待解决
HarmonyOS Rcp.post上传图库文件至服务器
929浏览 • 1回复 待解决
HarmonyOS文件上传怎么
1031浏览 • 1回复 待解决
HarmonyOS web上传文件图片
547浏览 • 1回复 待解决
AVRecorder 支持文件类型
1862浏览 • 1回复 待解决
HarmonyOS fs读取本地文件
629浏览 • 1回复 待解决
HarmonyOS rcp创建connection连接数
244浏览 • 1回复 待解决
HarmonyOS fs模块读取文件问题
963浏览 • 1回复 待解决