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); // 切换数据编码为Uint8Array
const 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) => {
	//解压.gz
	let res = await jsReadGZFiles(e.target.files) //如果后端返回的文件流,可直接[文件流]替换这里的e.target.files
	const byteArray = new Uint8Array(res); // 切换数据编码为Uint8Array
	const pakoArr = pako.ungzip(byteArray);
	//解压.tar
	let 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) //每个文件的文本内容
         })
    })
})

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值