刚开始最初的目标是向服务器发送图片数据,刚开始直接使用提供的图片处理流的方式就可以实现,可是后来发现图片的方法只能获取一个指定相对路径下的图片信息,不能通过文件路径来直接读取文件的流信息,不得已只能重新翻阅华为的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));
});
}