NodeJs的压缩文件之 - 模块 archiver 用法示例
# 安装archiver模块
在使用archiver
模块之前,需要先安装它,可以通过npm
或yarn
安装,下面是示例代码:
npm install archiver --save
1
接着,在代码文件中,需要通过require方法引入archiver模块,示例代码:
const archiver = require('archiver');
1
# archiver模块用法
# 1、压缩单个文件
下面演示如何使用archiver模块来压缩单个文件:
const fs = require('fs');
const archiver = require('archiver');
const output = fs.createWriteStream(__dirname + '/example.zip');
const archive = archiver('zip', {
zlib: { level: 9 } // 设置压缩级别
});
output.on('close', function() {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', function(err) {
throw err;
});
archive.pipe(output);
archive.file(__dirname + '/example.txt', { name: 'example.txt' });
archive.finalize();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
代码中,首先通过fs.createWriteStream()方法创建一个写入流,用于输出生成的压缩文件。然后通过archiver('zip', {...})方法来创建一个zip压缩文件对象。接着,通过archive.pipe(output)方法将压缩文件对象的输出流指向输出流,即压缩文件对象的数据流通过输出流写入到硬盘文件上。最后,通过archive.finalize()方法触发压缩文件对象的完成事件。
# 2、压缩多个文件
下面演示如何使用archiver模块来压缩多个文件:
const fs = require('fs');
const archiver = require('archiver');
const output = fs.createWriteStream(__dirname + '/example.zip');
const archive = archiver('zip', {
zlib: { level: 9 } // 设置压缩级别
});
output.on('close', function() {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', function(err) {
throw err;
});
archive.pipe(output);
archive
.file(__dirname + '/example1.txt', { name: 'example1.txt' })
.file(__dirname + '/example2.txt', { name: 'example2.txt' });
archive.finalize();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
代码与单个文件压缩的示例类似,只是在添加文件的时候,可以连续调用多个archive.file()方法添加多个文件。
# 3、压缩文件夹
要压缩一个文件夹,你可以使用Node.js中的zlib模块。以下是一个示例代码,演示如何使用zlib模块来压缩一个文件夹:
const fs = require('fs');
const zlib = require('zlib');
const archiver = require('archiver');
// 定义要压缩的文件夹路径
const folderPath = './folder';
// 创建一个输出流,将压缩后的文件保存为zip文件
const output = fs.createWriteStream('compressed.zip');
// 创建一个archiver实例,用于压缩文件夹
const archive = archiver('zip', {
zlib: { level: 9 } // 设置压缩级别
});
// 将输出流管道连接到archiver实例
archive.pipe(output);
// 递归遍历文件夹,并将每个文件添加到压缩包中
function addFolderToArchive(folderPath, archive) {
const files = fs.readdirSync(folderPath);
files.forEach((file) => {
const filePath = `${folderPath}/${file}`;
const stats = fs.statSync(filePath);
if (stats.isFile()) {
archive.append(fs.createReadStream(filePath), { name: file });
} else if (stats.isDirectory()) {
addFolderToArchive(filePath, archive);
}
});
}
// 添加文件夹到压缩包
addFolderToArchive(folderPath, archive);
// 完成压缩并关闭输出流
archive.finalize();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
在上述示例中,我们使用了archiver模块来创建一个压缩包,并使用zlib模块来进行压缩。首先,我们创建一个输出流,将压缩后的文件保存为compressed.zip。然后,我们创建一个archiver实例,并将输出流管道连接到该实例。接下来,我们使用递归函数addFolderToArchive来遍历文件夹,并将每个文件添加到压缩包中。最后,我们调用finalize方法来完成压缩,并关闭输出流。
上次更新: 2024/01/30, 00:35:17
- 01
- Node与GLIBC_2.27不兼容解决方案08-19
- 02
- Git清空本地文件跟踪缓存08-13