Nodejs压缩和解压缩zip文件

Nodejs压缩和解压缩zip文件

https://git.oschina.net/ccteams/hzip nodejs压缩和解压缩zip文件 替换zip文件里面的内容等 我自己写的,实际项目中在用了,没问题 可以用来操作Excel2007 或者Excel2010 我的项目中是用它来导出Excel的 纯javascript写的

var fs = require("fs");
var zlib = require("zlib");
var Hzip = require("../hzip");
var hzip = new Hzip(fs.readFileSync("./test.zip"));
//替换或增加文件
hzip.updateEntry("testDir/test.txt",fs.readFileSync("./test.txt"),function(err,buffer){
    if(err) console.log(err);
    if(fs.existsSync("./test2.zip") === true) fs.unlinkSync("./test2.zip");
    fs.writeFileSync("./test2.zip",buffer);
    //解压文件
    var entry = hzip.getEntry("testDir/test.txt");
    zlib.inflateRaw(entry.cfile,function(err,buf){
        console.log(buf.toString());
    });
});

8 回复

当然,我可以帮助你编写一个关于如何使用Node.js进行ZIP文件的压缩和解压缩的示例。这里将使用流行的库adm-zip,因为它易于使用且广泛被采用。

首先,你需要安装adm-zip库:

npm install adm-zip

接下来,我们可以创建一个简单的脚本来演示如何压缩和解压缩ZIP文件。这里提供了一个基本的示例:

压缩文件

假设我们有一个名为example.txt的文件,我们希望将其压缩到一个名为example.zip的新ZIP文件中。

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

// 创建一个新的AdmZip实例
const zip = new AdmZip();

// 添加文件到ZIP
zip.addLocalFile('example.txt');

// 将ZIP写入磁盘
zip.writeZip('./example.zip');

console.log('文件已成功压缩到 example.zip');

解压缩文件

现在,我们将从上述创建的example.zip中解压缩example.txt文件。

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

// 创建一个新的AdmZip实例
const zip = new AdmZip('example.zip');

// 解压缩文件到指定目录
zip.extractAllTo('./extracted/', true);

console.log('文件已成功解压缩到 extracted/ 目录');

替换ZIP中的文件

如果你想替换ZIP文件中的特定文件,你可以先删除旧文件,然后添加新文件。以下是一个示例:

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

// 创建一个新的AdmZip实例
const zip = new AdmZip('example.zip');

// 删除旧文件
zip.deleteFile('example.txt');

// 添加新文件
zip.addLocalFile('newExample.txt');

// 更新ZIP文件
zip.writeZip('./updatedExample.zip');

console.log('文件已成功替换并更新到 updatedExample.zip');

通过这些示例,你可以看到如何使用adm-zip库来处理ZIP文件的压缩、解压缩以及替换文件。这应该能帮助你在实际项目中有效地管理和操作ZIP文件。


非常不错,谢谢楼主。另外不知道有没有基于bytes数组的zip解压模块?例如用node下载一个zip,我希望不用保存到磁盘,直接读取zip内容并解包使用。谢谢。

你的仔细看一下我的例子,已经实现了你的需求了 fs.readFileSync("./test.zip")返回的就是Buffer类,就是bytes

能介绍一下导出excel是怎么写的么

请问你发的地址为什么是404呢?无法访问,有没有npm模块?

你用Excel2007以及以上的版本,新建立一个Excel,然后在上面随便写点东西, 然后改Excel的后缀名,从.xlxs改为.zip,然后再用好压解压开,里面会有很多xml文件, 一个个打开用Notepad++看一下,格式化美化一下xml,你就明白了 其中有一个shareString.xml文件里面是你刚刚输入进去的东西

google搜索一下 openXml

该示例代码展示了如何使用 Hzip 库来压缩、解压缩、替换和添加 ZIP 文件中的内容。下面是对代码的简要解释:

var fs = require("fs");
var zlib = require("zlib");
var Hzip = require("hzip");  // 确保你已经安装了 "hzip" 模块

var hzip = new Hzip(fs.readFileSync("./test.zip"));  // 读取现有的 ZIP 文件

// 替换或增加文件
hzip.updateEntry("testDir/test.txt", fs.readFileSync("./test.txt"), function(err, buffer) {
    if (err) {
        console.log(err);
        return;
    }

    if (fs.existsSync("./test2.zip")) {
        fs.unlinkSync("./test2.zip");  // 删除旧的 ZIP 文件(如果存在)
    }

    fs.writeFileSync("./test2.zip", buffer);  // 将修改后的 ZIP 文件写入磁盘

    // 解压文件
    var entry = hzip.getEntry("testDir/test.txt");
    zlib.inflateRaw(entry.cfile, function(err, buf) {
        if (err) {
            console.log(err);
            return;
        }
        console.log(buf.toString());  // 输出解压后的文件内容
    });
});

代码说明:

  1. 导入必要的模块fszlib 用于文件系统操作和压缩/解压缩。
  2. 创建 Hzip 实例:通过传入一个 ZIP 文件的内容到 Hzip 构造函数中。
  3. 更新 ZIP 文件条目:使用 updateEntry 方法替换或增加 ZIP 文件中的文件。
  4. 删除旧文件:如果目标文件已存在,则先将其删除。
  5. 写入新文件:将修改后的 ZIP 文件内容写入新的 ZIP 文件。
  6. 解压文件:使用 getEntry 获取指定条目的内容,并使用 zlib.inflateRaw 进行解压缩。

请注意,你需要确保 hzip 模块已正确安装并引入到你的项目中。你可以通过 npm 安装该模块:npm install hzip

回到顶部