HarmonyOS 鸿蒙Next 开发 arkts,如何读取图片数据并转换成base64数据

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 开发 arkts,如何读取图片数据并转换成base64数据

如何读取图片的二进制数据,转换成base64。 我想要用tcp来发送这些数据给服务器。我写了一个函数来实现此功能,传入参数是{图片的二进制数据大小,图片的绝对路径},但是运转不能行,我觉得是数据转换成base64时出错了。请帮我修改一下。

export function sendfile_base64(filesize:number,bufsize:number, file_path:string){      
  let file = fs.openSync(file_path, fs.OpenMode.READ_ONLY);
  let buffSize: number =bufsize;
  let buffer: ArrayBuffer = new ArrayBuffer(buffSize);

  let off: number = 0; // 记录读取位置的偏移(相较于文件起始偏移)
  let len: number = 0; // 本次读取内容的实际长度
  let readedLen: number = 0; // 记录已读文件长度
  let helper = new util.Base64Helper()

  try{
    while (len = fs.readSync(file.fd, buffer,{ length: buffSize })) {
      readedLen += len;
     
      let buffArr = new Uint8Array(buffer)
      let imageBase64String = helper.encodeToStringSync(buffArr)

      tcpSocket.send({data:imageBase64String})
      off = off + len;
      if ((filesize - readedLen) < buffSize) {
        buffSize = filesize - readedLen;
      }
    }
    console.info(‘文件读取数据大小为:’+readedLen.toString())
  }catch (e){
    AlertDialog.show({message:‘发送图片信息失败’+e.message})
  }
}

}
8 回复

盲猜是不是后端文件大小限制?python是dev状态还是nginx之类的转发了?

建议先使用postman之类的软件排查后端正常。

您的代码片段似乎是JavaScript中使用Node.js的文件系统模块(fs)和base64编码模块(util.Base64Helper)来读取文件并将其编码为base64字符串的一部分。代码中的变量如file、buffSize、buffer、off、len、readedLen等都是用来管理文件读取和base64编码过程的。

然而,您提供的代码片段在while循环中存在语法错误,即缺少了关闭括号。正确的while循环应该像这样:while (len = fs.readSync(file.fd, buffer,{ length: buffSize })) {
 //循环体的内容
}缺少关闭括号会导致语法错误,从而阻止代码的执行。

如果您需要进一步的帮助,例如如何修复这个错误或者如何完成整个文件读取并编码为base64字符串的功能,请提供完整的代码,这样我可以给出更准确的指导。

您好,如果缺少括号的话,我会加上括号,请问语法上还有其他问题吗

怎么个不行,是没法送还是咋的了

发送的数据量其实是完全的。 但是我的服务器端是python,用python接收的时候,经常只是接收到一部分,就tcp故障断了连接

超时自动断?

tcp发送文件的时候,是不是应该要开一个单独的线程,用来给tcp发送文件数据?

在HarmonyOS鸿蒙Next开发中,使用ArkTS(ArkUI的TypeScript声明式开发框架)读取图片数据并转换成Base64数据,可以通过以下步骤实现:

  1. 获取图片路径:首先,确保你拥有要读取的图片路径。这通常是在应用的资源目录或者通过文件选择器获取。

  2. 读取图片文件:使用File API或者其他文件系统访问接口读取图片文件。鸿蒙系统提供了相应的文件系统API,可以用于读取文件内容。

  3. 编码为Base64:将读取到的图片数据(通常是二进制数据)编码为Base64字符串。可以使用JavaScript的内置方法btoa(),但需要先将二进制数据转换为字符串(可以使用Uint8ArrayTextDecoder)。

示例代码片段(伪代码):

// 假设图片路径为imagePath
let file = await fetch(imagePath).then(res => res.blob());
let reader = new FileReader();
reader.onload = function(event) {
    let arrayBuffer = event.target.result;
    let byteArray = new Uint8Array(arrayBuffer);
    let binaryString = '';
    byteArray.forEach(byte => binaryString += String.fromCharCode(byte));
    let base64String = btoa(binaryString);
    console.log(base64String);
};
reader.readAsArrayBuffer(file);

注意:上述代码仅为示例,实际开发中可能需要根据鸿蒙系统的API进行调整。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部