解压zip包依赖于 zip-local
npm install zip-local -save
然后 引入并加压zip
import zipper from 'zip-local'
我的使用场景是在上传文件后直接解压,所以直接使用ctx.request.body.files.file.path,unzpi的参数格式是file
var unzippedfs = zipper.sync.unzip(ctx.request.body.files.file.path).memory();
unzippedfs包含解压的文件数据,通过unzippedfs.contents()可以获取压缩文件里的文件名称数组,
在这可以过滤筛选文件
例如我需要获取test.json和dev.csv文件,在这我直接将文件转换为Buffer,其他类型自行转换
let viewBuffer = null
let csvBuffer = null
for(let filename of unzippedfs.contents()){
if(filename == 'test.json'){
viewBuffer = unzippedfs.read(filename, 'buffer') //参数"buffer"指定将文件以Buffer类型返回
}
if(filename == 'dev.csv'){
csvBuffer = unzippedfs.read(filename, 'buffer')
}
}
到此就已经解压并获取了压缩文件内的文件数据,然后就是将文件数据转换为可使用的数据对象
test.json 转换为object方式为:JSON.parse(viewBuffer.toString('utf8'))
dev.csv转换依赖工具 neat-csv
cnpm install neat-csv install
import neatCSV from 'neat-csv'
let csv = await neatCSV(csvBuffer )
解析后的csv类型为数组,数组内就是csv文件内的数据,
neatCSV() 接受类型为string | Buffer | ReadableStream的参数