ARkTs获取一个文件的ArrayBuffer流并将其转换为Uint8Array流

刚开始最初的目标是向服务器发送图片数据,刚开始直接使用提供的图片处理流的方式就可以实现,可是后来发现图片的方法只能获取一个指定相对路径下的图片信息,不能通过文件路径来直接读取文件的流信息,不得已只能重新翻阅华为的api文档,在经过两天的努力后终于找到了读取文件流的方法。

由于以前的File包被替换为了新的fs包,所以导致一些chat并不能给出较好的答案。下面我将介绍使用fs来获取一个文件的流。

1、导包

import fs from '@ohos.file.fs';

2、定义fs包下的File接口与一个流对象

let file:fs.File
let arrayBuffer = new ArrayBuffer(16777216)//指定流的长度

3、调用fs中的openSync方法,打开文件,我这里参数为只读模式,这里报错的话大部分是因为路径下文件为只读模式,可你写的模式为读写模式

file = fs.openSync(filePath,fs.OpenMode.READ_ONLY)//参数分别为文件路径,打开模式

4、将文件读到arrayBuffer流中。

fs.read(file.fd,arrayBuffer).then((readline:number)=>{
    console.log('aaaaa01',"读取文件成功")
})

此时文件的流已经被写入到了arrayBuffer中

5、将arrayBuffer流转换为Uint8Array流

new Uint8Array(arrayBuffer)

此时就已经完成了转换

———————————————————————————————————————————

完整代码:

import fs from '@ohos.file.fs';
//将文件转为Uint8Array输出流
export function readFileAsUint8Array(filePath:string) {
  console.log('aaaaa',filePath)
  let file:fs.File
  let arrayBuffer = new ArrayBuffer(16777216);
  file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
  fs.read(file.fd, arrayBuffer).then((readLen: number) => {
    console.log('aaaaa01',"读取文件成功");
  })
  return new Promise<Uint8Array>((resolve) => {
    // data是一个ArrayBuffer,我们可以从中创建一个Uint8Array
    resolve(new Uint8Array(arrayBuffer));
  });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值