700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > js解压.gz .tar .tar.gz .zip等压缩文件(另读取文件文本内容)

js解压.gz .tar .tar.gz .zip等压缩文件(另读取文件文本内容)

时间:2019-11-30 22:31:07

相关推荐

js解压.gz .tar .tar.gz .zip等压缩文件(另读取文件文本内容)

.gz

1、先把文件、文件流转换成需要的ArrayBuffer格式:

//单独封装的//此处files可以是[接口返回的文件流],也可以是input选择的文件信息中e.target.files//type可传''export const jsReadGZFiles = (files,type) => {return new Promise(function(resolve,reject){let blob = new Blob(files, {type })let reader = new FileReader();reader.onload = function () {resolve(reader.result)};reader.readAsArrayBuffer(blob);})}

2、安装pako,npm i pako / yarn add pako 即可

const pako = require('pako') //import不可以let res = await jsReadGZFiles(e.target.files)const byteArray = new Uint8Array(res); // 切换数据编码为Uint8Arrayconst pakoArr = pako.ungzip(byteArray);console.log("带格式结果", pakoArr) //此为结果,可以转换为需要的格式,如pakoArr.buffer即为结果的ArrayBuffer格式数据

.tar

引入tarballjs,下载地址:tarballjs,仅使用tarball.js即可

import {TarReader} from "../../utils/tarball"let treader = new TarReader();treader.readFile(new File([此处ArrayBuffer类型数据],'此处临时文件名吧,用不到就随便写')).then((res)=>{console.log("此处是解压后文件信息列表数组", res)})

.tar.gz

上面两种解压组合起来就是解压.tar.gz的方法

1、先处理.gz

2、再处理.tar

3、读取文件文本内容

<input type="file" @change="getGZFileContent">import {TarReader} from "../../utils/tarball"const pako = require('pako')//input读取的压缩包,const getGZFileContent = async (e) => {//解压.gzlet res = await jsReadGZFiles(e.target.files) //如果后端返回的文件流,可直接[文件流]替换这里的e.target.filesconst byteArray = new Uint8Array(res); // 切换数据编码为Uint8Arrayconst pakoArr = pako.ungzip(byteArray);//解压.tarlet treader = new TarReader();treader.readFile(new File([pakoArr.buffer],'xxx')).then((res)=>{res.forEach((item,index)=>{//读取文本内容//其中一个文件名,我的是.json文件if(item.name == 'detection_report.json'){let content = treader.getTextFile(item.name);console.log(content) //指定文件的内容}})}).catch(()=>{})}

.zip

安装jszip

import JSZip from "jszip";let unz = new JSZip();//zipdata是不加[]的file或文件流unz.loadAsync(zipdata).then((res)=>{Object.keys(res.files).forEach((item,index)=>{//string可以更换,如blob//item是每个文件名unz.file(item).async("string").then((content)=>{console.log(content) //每个文件的文本内容})})})

(本文暂时只有解压没有压缩)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。