jszip 解压压缩包_Node.js使用jszip实现打包zip压缩包

本文介绍了如何使用jszip在Node.js环境下将.mtl和.obj文件打包成.zip压缩包。通过引入jszip库,创建压缩对象,添加文件,然后生成并保存压缩包到本地,同时提供了删除源文件的选项。此外,还回顾了Node.js的文件系统操作,如读取、写入和删除文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

最近有这样的一个需求,需要把两个同名的.mtl文件和.obj文件打包成一个同名的.zip压缩包。刚开始文件不多的时候,只有几个,或者十几个,甚至二三十个的时候,还能勉强接受手动修改,但是随着项目的进展,手动压缩是没有效率且浪费时间的,于是就有了想用程序实现自动打包的想法。

97ffb877c50741c585d436d2a3477010.png

二、使用jszip打包压缩包

首先项目的前端是通过jszip进行解压读取的,既然它能解压,自然也可以实现压缩。上GitHub上找了关于zip的压缩插件,还是发现jszip的star是排名第一的,不用用,有些过意不去啊。

开始我的步骤:

1、在Node.js项目里引入jszip包

npm install --save-dev jszip

2、jszip核心代码

var fs = require('fs');var path = require('path');var JSZip = require('jszip');var config ={

// 文件根目录

dir:"C:/objs/ariport/"}/**

* 把mtl文件和obj文件打包成zip压缩包

* @param {} fileName 不带文件后缀的文件名

* @param {} {delSource = false } = {} 是否删除源文件*/

function toZipOfMtlObj (fileName, { delSource = false } ={}) {var zip = newJSZip();var extArr = ['.mtl', '.obj'];

extArr.forEach(ext=>{

let file= fileName +ext;

let content= getFileContent(fileName +ext);

zip.file(file, content);

})//压缩

zip.generateAsync({//压缩类型选择nodebuffer,在回调函数中会返回zip压缩包的Buffer的值,再利用fs保存至本地

type: "nodebuffer",//压缩算法

compression: "DEFLATE",

compressionOptions: {

level:9}

}).then(function(content) {

let zip= fileName + '.zip';//写入磁盘

fs.writeFile(getFullFileName(zip), content, function(err) {if (!err) {//是否删除源文件

if(delSource) {

extArr.forEach(ext=>{

delFile(fileName+ext);

})

}

}else{

console.log(zip+ '压缩失败');

}

});

});

}/**

* 获取文件内容

* @param {string} fileName 文件名 file.mtl*/

functiongetFileContent (fileName) {

// 指定encoding会返回一个string,否则返回一个Buffer

let content= fs.readFileSync(getFullFileName(fileName), { encoding: "utf-8"});returncontent;

}/**

* 获取完整文件路径

* @param {string} fileName 文件名 file.mtl*/

functiongetFullFileName (fileName) {returnpath.join(config.dir, fileName);

}/**

* 删除文件

* @param {string} fileName 文件名 file.mtl*/

functiondelFile (fileName) {

fs.unlink(getFullFileName(fileName),function(err) {if (!!err) {

console.log('删除文件失败:' +file);

}

});

}

第一步:声明一个jszip压缩对象

var zip = new JSZip();

第二步:往jszip压缩对象添加文件

//jszip.file接收两个参数,第一个参数是文件名,第二个参数是内容

zip.file('Building_North_001.mtl','这里是内容,可以是string,也可以是Buffer');

zip.file('Building_North_001.obj','这里是内容,可以是string,也可以是Buffer');//jszip还可以添加文件夹,这里我就不做说明,可以参考官方文档。

第三步:生成zip压缩包内容的Buffer值,专门为Node.js使用

//压缩

zip.generateAsync({//压缩类型选择nodebuffer,在回调函数中会返回zip压缩包的Buffer的值,再利用fs保存至本地

type: "nodebuffer",//压缩算法

compression: "DEFLATE",

compressionOptions: {

level:9}

}).then(function(content) {

let zip= 'Building_North_001.zip';//写入磁盘

fs.writeFile('C:/objs/airport/' + zip , content, function(err) {if (!err) {//写入磁盘成功

console.log(zip + '压缩成功');}else{

console.log(zip+ '压缩失败');

}

});

});

三、最后,总结

关于jszip压缩部分就这么多,这仅仅只是简单的一部分,更多的内容,可以访问jszip的官方介绍。

在实现这个压缩功能的过程中,也顺便复习了Node.js中文件系统fs的使用:

1、同步读取文件夹下的文件列表:fs.readdirSync(config.dir);

2、获取一个文件的属性:fs.statSync(filePath);

3、重命名:fs.rename(oldPath, newPath, function (err) {});

4、写入文件:fs.writeFile(fullPath, content, function (err) {});

5、同步读取文件内容,指定encoding会返回一个string,否则返回一个Buffer:fs.readFileSync(getFullFileName(fileName), { encoding: "utf-8" });

6、删除一个文件:fs.unlink(fullPath, function (err) {});

学无止境,总结就这么多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值