Nodejs 对文件夹的zip操作

Nodejs 对文件夹的zip操作

找了好多 大多都是对文件的处理,有没有直接对一整个文件夹进行处理的zip方法呢

11 回复

当然可以!在 Node.js 中,你可以使用 adm-zip 这个库来实现对整个文件夹的压缩操作。adm-zip 是一个非常方便的库,支持创建、添加、删除以及提取 ZIP 文件。

首先,你需要安装 adm-zip 库。可以通过 npm 安装:

npm install adm-zip

接下来,我们来看一下如何使用 adm-zip 来压缩整个文件夹。以下是一个简单的示例代码:

const AdmZip = require('adm-zip');
const fs = require('fs');

// 指定要压缩的文件夹路径
const sourceFolder = './path/to/source/folder';
// 指定输出的 zip 文件路径
const outputZipFile = './output.zip';

// 创建一个新的 ZIP 文件对象
const zip = new AdmZip();

// 获取文件夹内的所有文件和子文件夹
fs.readdirSync(sourceFolder).forEach(file => {
    // 构建完整的文件路径
    const filePath = `${sourceFolder}/${file}`;
    
    // 如果是文件,则直接添加到 ZIP 文件中
    if (fs.statSync(filePath).isFile()) {
        zip.addLocalFile(filePath);
    }
    // 如果是目录,则递归遍历并添加到 ZIP 文件中
    else if (fs.statSync(filePath).isDirectory()) {
        zip.addLocalFolder(filePath, file);
    }
});

// 将生成的 ZIP 文件写入磁盘
zip.writeZip(outputZipFile);

console.log(`文件夹已成功压缩为 ${outputZipFile}`);

代码解析

  1. 引入必要的模块

    • AdmZip:用于创建和管理 ZIP 文件。
    • fs:用于读取和写入文件系统。
  2. 指定源文件夹和目标 ZIP 文件路径

    • sourceFolder:需要压缩的文件夹路径。
    • outputZipFile:生成的 ZIP 文件路径。
  3. 创建 ZIP 文件对象

    • new AdmZip():初始化一个新的 ZIP 文件对象。
  4. 遍历源文件夹

    • 使用 fs.readdirSync 读取源文件夹中的所有文件和子文件夹。
    • 对每个文件或子文件夹进行检查:
      • 如果是文件,使用 zip.addLocalFile 方法将其添加到 ZIP 文件中。
      • 如果是目录,使用 zip.addLocalFolder 方法递归地将目录及其内容添加到 ZIP 文件中。
  5. 写入 ZIP 文件

    • 使用 zip.writeZip(outputZipFile) 方法将生成的 ZIP 文件写入磁盘。

这样,你就可以轻松地使用 Node.js 和 adm-zip 库来压缩整个文件夹了。希望这对你有帮助!


貌似文档里面没有对文件夹的操作,
http://nodejs.org/api/zlib.html

之前项目需要要找了很多,最终用的这个:node-archiver 附上地址:https://github.com/ctalkington/node-archiver

直接用Node调用linux的zip命令呢?

.pipe(response); // Write back to the response, or wherever

最后这个方法是什么意思 写入你想存入的路径?里面这个参数是什么意思,写的路径也不对 啊

archive.bulk([ { expand: true, cwd: ‘’, src: [’’] } ]); 是用的这个方法吗 cwd,src里面的参数是什么意思?一个路径一个文件格式?

哈哈哈哈,你问我就算找对人了。。。 这就是你想要的 https://github.com/ctalkington/node-archiver

建议直接执行系统命令 zip

对于 Node.js 中对整个文件夹进行 ZIP 操作的需求,可以使用 archiver 这个库。archiver 是一个非常强大且灵活的库,用于创建 ZIP 和 TAR 文件。下面是一个简单的示例,演示如何使用 archiver 库来压缩整个文件夹。

首先,你需要安装 archiver

npm install archiver

然后,你可以使用以下代码来创建一个 ZIP 文件,该文件包含指定目录下的所有文件:

const fs = require('fs');
const archiver = require('archiver');

// 创建一个可写流,用于将ZIP文件写入到指定的路径
const output = fs.createWriteStream(__dirname + '/example.zip');
const archive = archiver('zip');

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;
});

// 将目录添加到ZIP文件中
archive.directory('./source/', false);

// 开始打包过程
archive.finalize();

在这段代码中:

  1. 我们首先引入了必要的模块。
  2. 使用 fs.createWriteStream 创建了一个写入流,用于输出最终的 ZIP 文件。
  3. 初始化了 archiver 实例,并指定了 ZIP 格式。
  4. 监听 outputclose 事件,以便在完成时显示总字节数。
  5. 添加了一个错误处理机制,以确保任何错误都能被捕捉并抛出。
  6. 使用 archive.directory 方法将源目录(例如 ./source/)添加到 ZIP 文件中。这里的第二个参数是相对路径,如果设置为 false,则保留原始目录结构。
  7. 最后,调用 archive.finalize() 来开始压缩过程。

这个例子展示了如何将整个目录压缩成一个 ZIP 文件。你可以根据需要修改源目录路径、输出文件名等参数。

回到顶部