iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Node.js 应用探索文件解压缩示例详解
  • 589
分享到

Node.js 应用探索文件解压缩示例详解

2024-04-02 19:04:59 589人浏览 安东尼
摘要

目录引言compressing解压压缩arcHiveradm-zip压缩解压缩总结引言 今天在使用 node 脚本对文件处理时,需要实现一个功能,要对一个 zip 压缩包解压出来,修

引言

今天在使用 node 脚本对文件处理时,需要实现一个功能,要对一个 zip 压缩包解压出来,修改里面的文件后,重新打包成zip包。node 解压缩文件的场景在实际应用中还是比较常见,下面介绍几个用来解压缩文件的库和使用方法。

compressing

compressing 是一个使用起来方便、功能非常强大的node库,它可以对文件、文件夹进行解压或压缩,支持tar、gzip、tgz、zip等多种格式。

简单安装之后 npm install compressing,以 zip 压缩包为例

解压

解压比较简单,tar、gzip、zip 都是同个 api

const compressing = require('compressing');
// 将压缩包解压到 test 文件夹中
compressing.zip.uncompress('./test.zip','./test').then(() => {
	console.log('解压完成')
}).catch(() => {
	console.log('解压失败')
})
// 将压缩包解压到当前文件夹中
compressing.zip.uncompress('./test.zip','./')

压缩

const compressing = require('compressing');
// 压缩一个文件
compressing.zip.compressFile('E:/1.txt','E:/1.zip').then(() => {
	console.log('压缩完成')
}).catch(() => {
	console.log('压缩失败')
})
// 压缩一个文件夹
compressing.zip.compressDir('E:/test', 'E:/test.zip').then(func1).catch(func2);
// 同时压缩多个文件和文件夹,采用 stream 的方式
const zipStream = new compressing.zip.Stream();
zipStream.addEntry('./test');
zipStream.addEntry('./1.txt');
zipStream.pipe(fs.createWriteStream('./test1.zip')).on('finish', ()=>{
	console.log('压缩完成')
}).on('error', ()=>{
	console.log('压缩失败')
})

在使用compressing.zip.compressDir压缩整个文件夹的时候,会把最外层的文件夹也一起压缩,解压出来又是一个完整的文件夹。但是我的需求时只想把这个文件夹下的所有文件打包,直接解压出来得到零散的很多个文件。

最初的想法呢是通过 fs的API对文件夹进行遍历,用 addEntry 的方式打包,后来发现原来是可以设置参数的,只是文档中没有表现出来,而且写着:usually you don't need it ,导致我走了很多弯路。

后面在 addEntry 的接口文档中看到了有个 opt.ignoreBase 的参数,才想到 compressDir 是不是也可以用。于是尝试了一下,的确满足了我的需求,含泪删掉遍历文件夹的代码。

compressing.zip.compressDir('E:/test', 'E:/test.zip', {
	ignoreBase: true
})

基本上,一个解压和压缩的需求就可以完成了。可偏偏就遇到了个问题,在用 compressing 压缩成一个zip包之后,在某个特殊的系统中,用系统自带的解压出来,文件都变成文件夹了,比如 app.js 是个js文件,解压后变成一个名为 app.js 的文件夹。这就很尴尬了。

我尝试了compressDiraddEntry的方式,最终得到的结果都一样。于是乎,为了验证是这个系统本身解压算法的问题,我又找了另外一个压缩库。

archiver

archiver是一个在nodejs中能跨平台实现打包功能的模块,通过 stream 的方式,可以打zip和tar包。如果连这个打包之后在这个系统中解压出来的文件还是有问题的话,那我就可以认为是这个系统的问题,而不是我代码的问题。

const output = fs.createWriteStream('./test.zip');
const archive = archiver('zip', {zlib: {
	level: 9 // 设置压缩等级
}});
archive.pipe(output);
archive.directory('./test', false); // 这里false参数和上面的ignoreBase为true效果一样
archive.finalize();	// 完成压缩
archive.on('end', () => {	// 压缩结束时触发
	console.log('压缩完成');
});

本来想证明是这个系统本身存在问题,结果却狠狠打脸了。用 archiver 压缩后的 zip 包在这个系统中解压出来是正常的文件,那么真相就是 compressing 的压缩算法有点问题,只不过这个问题复现的场景很不一般,在正常的系统中都不会遇到。

不过呢,我想了又想,现在也只能算是一比一打平,为了科学的严谨性,我决定再找一个压缩库进行验证。

adm-zip

adm-zip 是一个支持zip压缩和解压缩的库,而我也只需要压缩zip格式包,刚好可以满足我的需求。

压缩

const admzip = new AdmZip();
// 压缩文件夹
admzip.addLocalFolder('./test');
// 压缩文件
admzip.addLocalFile('./1.txt');
admzip.writeZip('./test.zip');

addLocalFolder 压缩整个文件夹的时候,会把这个文件夹下的所有文件打包,直接解压出来得到零散的很多个文件,效果和compressDir设置参数ignoreBase为true一样。

addLocalFolder 支持第二个参数,可以将要压缩的文件,压缩进压缩包的某个路径下。

admzip.addLocalFolder('./test','aaa');
admzip.addLocalFolder('./test','aaa/bbb');

可以设置多级目录,解压出来后的文件就在这个目录里。

writeZip 是一个同步的方法,而上面两个库压缩都是异步的。在使用 adm-zip 打包之后,验证出来的效果和 archiver 是一样的,在那个特殊的系统上,解压都没有问题。这就真的证明了 compressing 真的存在小问题,不过在正常场景中应该都可以忽略不计。

解压缩

adm-zip 也支持解压缩。

const admzip = new AdmZip('./test.zip');
admzip.extractAllTo('./test'); // 把整个压缩包完全解压到 test 目录中

除了解压整个压缩包,还支持单独解压某个文件

const admzip = new AdmZip('./test.zip');
const entry = zip.getEntry('1.txt');
admzip.extractEntryTo(entry, './test2', true, true);

extractEntryTo 支持4个参数,第三个参数表示是否需要创建父文件夹,第四个参数表示是否要覆盖。

总结

经过多个库的使用和对比,发现 adm-zip 可以完美的解决我的需求,同时打包之后,体积也是最小的。在大部分的开发场景中,用哪个库其实都不会有问题的。compressing 可以支持更多的压缩格式,adm-zip只支持zip格式,archiver 却不支持解压缩,因此根据自己的应用场景选择最合适的库吧。

以上就是node.js 应用探索文件解压缩示例详解的详细内容,更多关于Node.js 文件解压缩的资料请关注编程网其它相关文章!

--结束END--

本文标题: Node.js 应用探索文件解压缩示例详解

本文链接: https://www.lsjlt.com/news/166956.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js 应用探索文件解压缩示例详解
    目录引言compressing解压压缩archiveradm-zip压缩解压缩总结引言 今天在使用 node 脚本对文件处理时,需要实现一个功能,要对一个 zip 压缩包解压出来,修...
    99+
    2024-04-02
  • go压缩解压zip文件源码示例
    目录压缩zip解压zip压缩zip func Zip(dest string, paths ...string) error { zfile, err := os.Creat...
    99+
    2024-04-02
  • Python 解压缩文件详解
    zipfile模块及相关方法介绍: 1 压缩 1.1 创建zipfile对象 zipfile.ZipFile(file, mode='r', compression=0, allowZip64=True, compresslevel=Non...
    99+
    2023-01-31
    解压缩 详解 文件
  • Node.js中zip压缩和zip解压缩实例用法
    本篇内容主要讲解“Node.js中zip压缩和zip解压缩实例用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中zip压缩和zip解压缩实例用法...
    99+
    2024-04-02
  • 【linux】tar指令压缩解压缩文件夹、文件命令详解
    1. tar常用命令: 压缩当前目录下文件夹/文件test到test.tar.gz: tar -zcvf test.tar.gz test 解压缩当前目录下的file.tar.gz到file: tar...
    99+
    2023-08-31
    linux 服务器 运维 压缩tar
  • Python批量解压&压缩文件夹的示例代码
    目录一、python批量解压二、python批量压缩一、python批量解压 提示:如果是重要数据解压前请先备份,解压后会覆盖原压缩文件!! 解压前: 解压后:文件名为英文: 文...
    99+
    2024-04-02
  • Java压缩文件操作详解
    目录一、题目描述-压缩文本文件1、题目2、解题思路3、代码详解二、题目描述-压缩文件解压到指定文件夹1、题目2、解题思路3、代码详解三、题目描述-压缩所有子文件夹1、题目2、解题思路...
    99+
    2022-11-13
    Java 压缩文件夹 Java压缩文件操作 Java压缩文件
  • python3压缩和解压文件案例总结
    目录python3压缩和解压文件扩展:Python3用代码实现压缩与解压一、说明二、zip文件压缩和解压缩实现三、tar文件的压缩与解压缩实现python3压缩和解压文件 1、tar...
    99+
    2023-02-15
    python压缩和解压文件 python3压缩和解压
  • golang中tar压缩和解压文件详情
    目录1、压缩并输出tar.gz文档 2、tar解压缩 查看官方文档,官方自带的演示: // 官方演示 package main import ( "archive/t...
    99+
    2024-04-02
  • Android应用中如何对文件进行压缩与解压缩
    Android应用中如何对文件进行压缩与解压缩?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用场景当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样...
    99+
    2023-05-31
    android roi
  • C#使用SharpZipLib压缩解压文件
    一、介绍 SharpZipLib是一个完全由C#编写的ZIP,GZIP,Tar和BZIP2 Library,可以方便的支持这几种格式的压缩和解压缩。 https://github.c...
    99+
    2024-04-02
  • c语言压缩文件详细讲解
    目录c语言压缩文件一、单文件压缩二、多文件压缩三、多文件异步压缩四、压缩文件夹c语言压缩文件 话说当今压缩市场三足鼎立,能叫上名号的有zip、rar、7z。其中zip是压缩界的鼻祖,...
    99+
    2024-04-02
  • java使用ant.jar解压缩文件
    要使用Ant.jar解压缩文件,你需要编写一个Ant构建文件,并使用Ant命令行工具来执行该构建文件。以下是一个示例构建文件的内容:...
    99+
    2023-09-23
    java
  • C#压缩或解压rar、zip文件方法实例
    前言 为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar、zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩...
    99+
    2024-04-02
  • 怎样用Python解压缩*.tgz文件
    怎样用Python解压缩*.tgz文件 KnightPython:正如*大熊*所说,使用tarfile模块即可:import tarfiletarobj = tarfile.open("my_backup_file.tgz", "r:gz...
    99+
    2023-01-31
    解压缩 文件 Python
  • Win10如何使用自带压缩、解压zip压缩文件功能
      Windows系统自带不少工具,到了Win10,好用的功能依然保留,比如压缩/解压zip压缩文件的功能。压缩文件能为系统节省空间,这一功能必不可少。Win10如何使用压缩/解压zip压缩文件功能?   Win10压缩...
    99+
    2023-06-10
    Win10 压缩 功能 自带 压缩文件
  • 利用Java怎么对文件进行压缩与解压缩
    今天就跟大家聊聊有关利用Java怎么对文件进行压缩与解压缩,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。用java压缩/解压文件: import java.io.*; im...
    99+
    2023-05-31
    java ava
  • 使用zzip和minizip解压缩文件
    要使用zzip和minizip解压缩文件,你需要按照以下步骤进行操作:1. 首先,你需要在你的系统上安装zzip和minizip。你...
    99+
    2023-09-12
    zzip
  • 使用 Python 破解压缩文件的密码的思路详解
    经常遇到百度网盘的压缩文件加密了,今天我们就破解它! 实现思路 上篇文章给大家介绍了爆破密码的思路,感兴趣的朋友可以了解下。 其实都大同小异:无非就是字典爆破,就看你是有现成密码字典...
    99+
    2024-04-02
  • 如何使用Python破解压缩文件
    这篇文章主要介绍如何使用Python破解压缩文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!其实都大同小异:无非就是字典爆破,就看你是有现成密码字典,还是自己生成密码字典,然后进行循环输入密码,直到输入正确位置。现...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作