使用JavaScript怎么在线解压压缩文件

  介绍

本篇文章给大家分享的是有关使用JavaScript怎么在线解压压缩文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、邮政格式简介

ZIP文件格式是一种数据压缩和文档储存的文件格式,原名缩小,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料. ZIP通常使用后缀名”。邮政”,它的MIME格式为“应用程序/zip”。目前,zip格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7 z格式。

压缩是一种相当简单的分别压缩每个文件的存档格式,分别压缩文件允许不必读取另外的数据而检索独立的文件。理论上,这种格式允许对不同的文件使用不同的算法。然而,在实际上,邮政大多数都是在使用卡茨(Katz)的缩小算法。

简单介绍完zip格式,接下来阿宝哥先来介绍基于JSZip这个库的浏览器解压方案。

二、浏览器解压方案

JSZip是一个用于创建,读取和编辑. zip文件的JavaScript库,该库支持大多数浏览器,具体的兼容性如下图所示:

使用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怎么在线解压压缩文件