介绍一、邮政格式简介
二、浏览器解压方案
2.1定义工具类
2.2在线解压压缩文件
本篇文章给大家分享的是有关使用JavaScript怎么在线解压压缩文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
一、邮政格式简介
ZIP文件格式是一种数据压缩和文档储存的文件格式,原名缩小,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料. ZIP通常使用后缀名”。邮政”,它的MIME格式为“应用程序/zip”。目前,zip格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7 z格式。
压缩是一种相当简单的分别压缩每个文件的存档格式,分别压缩文件允许不必读取另外的数据而检索独立的文件。理论上,这种格式允许对不同的文件使用不同的算法。然而,在实际上,邮政大多数都是在使用卡茨(Katz)的缩小算法。
简单介绍完zip格式,接下来阿宝哥先来介绍基于JSZip这个库的浏览器解压方案。
二、浏览器解压方案
JSZip是一个用于创建,读取和编辑. zip文件的JavaScript库,该库支持大多数浏览器,具体的兼容性如下图所示:
其实有了JSZip这个库的帮助,要实现浏览器端在线解压压缩文件的功能并不难。因为官方已经为我们提供了解压本地文件,解压远程文件和生成zip文件的完整示例。好的,废话不多说,下面我们来一步步实现在线解压压缩文件的功能。
2.1定义工具类
浏览器端在线解压压缩文件的功能,可以拆分为下载压缩文件,解析zip文件和展示zip文件3个小功能。考虑到功能复用性,阿宝哥把下载压缩文件和解析zip文件的逻辑封装在ExeJSZip类中:
class ExeJSZip {//才能,用于获取url地址对应的文件内容 getBinaryContent才能(url, progressFn =,(),=祝辞,{}),{ ,,,return new 承诺((解决,,拒绝),=祝辞,{ ,,,,,if (typeof url  !==,“string", | |, !/https ?:/test (url)) ,,,,,,,拒绝(new 错误(“url 参数不合法“)); ,,,,,JSZipUtils.getBinaryContent (url,, {,//JSZipUtils来自于jszip-utils这个库 ,,,,,,,进步:,progressFn, ,,,,,,,回调:,(呃,,数据),=祝辞,{ ,,,,,,,,,if (err), { ,,,,,,,,,,,拒绝(错); ,,,,,,,,,},{else ,,,,,,,,,,,解决(数据); ,,,,,,,,,} ,,,,,,,}, ,,,,,}); ,,,}); ,,} ,,//才能,遍历Zip文件 async 才能;iterateZipFile(数据,iterationFn), { ,,,if (typeof iterationFn  !==,“function"), { ,,,,,throw new 错误(“iterationFn 不是函数类型“); ,,,} ,,,let 拉链; ,,,try { ,,,,,zip =, await JSZip.loadAsync(数据),,//,JSZip来自于JSZip这个库 ,,,,,zip.forEach (iterationFn); ,,,,,return 拉链; ,,,},catch (错误),{ ,,,,,throw new 误差(); ,,,} ,,} }
2.2在线解压压缩文件
利用ExeJSZip类的实例,我们就可以很容易实现在线解压压缩文件的功能:
html代码
& lt; p> & lt;才能label>请输入ZIP文件的线上地址:& lt;/label> & lt;才能input 类型=皌ext", id=皕ipUrl",/比; & lt;/p> & lt; button id=皍nzipBtn", onclick=皍nzipOnline()“在在线解压& lt;/button> & lt; p id=皊tatus"祝辞& lt;/p> & lt; ul id=癴ileList"祝辞& lt;/ul>
JS代码
const zipUrlEle =, document.querySelector (“# zipUrl"); const statusEle =, document.querySelector (“# status"); const fileList =, document.querySelector (“# fileList"); const exeJSZip =, new ExeJSZip ();//,执行在线解压操作 async function  unzipOnline (), { fileList.innerHTML =,才能“,“; statusEle.innerText =,才能“开始下载文件…“; const 才能;data =, await exeJSZip.getBinaryContent ( ,,,zipUrlEle.value, ,,handleProgress ,,); let 才能;items =,““ await 才能;exeJSZip.iterateZipFile(数据,(relativePath, zipEntry),=祝辞,{ ,,,items +=,=$ & lt; li 类{zipEntry.dir ?,“caret",:,“indent"}祝辞 ,,,,,{zipEntry.name} & lt;美元/li>”; ,,}); statusEle.innerText =,才能“ZIP文件解压成功“; 时间=fileList.innerHTML 才能;项目; }//,处理下载进度 function handleProgress (progressData), { const 才能,{,百分比,加载,,total },=, progressData; if 才能;(loaded ===,总),{ null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用JavaScript怎么在线解压压缩文件