【简介】

包名:adm-zip

版本:0.4.13

依赖包数:0个

周下载量:118w

未解问题:118个

最后更新:3个月前

【总结】

1.同时支持压缩和解压缩

2.下载量大,0依赖于其他包

3.文档较弱,未解问题比较多

4.中文文件名乱码

建议:只使用unzip相关方法(fix中文bug后)

【完整代码】

包括unzip方法,zipFile方法,zipFolder方法等

var admZip = require('adm-zip');
var iconv  = require('iconv-lite');
​
/*** unzip*   zipFile,待解压缩的zip文件*   destFolder,解压缩后存放的文件夹*/
function unzip(zipFile, destFolder){var zip = new admZip(zipFile);var zipEntries = zip.getEntries();for(var i=0; i<zipEntries.length; i++){var entry = zipEntries[i];entry.entryName = iconv.decode(entry.rawEntryName, 'gbk');}zip.extractAllTo(destFolder, true);
}
​
/*** zip file*   sourceFile,待压缩的文件*   destZip,压缩后的zip文件*/
function zipFile(sourceFile, destZip){var zip = new admZip();zip.addLocalFile(sourceFile);zip.writeZip(destZip);
}
​
/**
* zip folder
*   sourceFolder,待压缩的文件夹
*   destZip,压缩后的zip文件
*/
function zipFolder(sourceFolder, destZip){var zip = new admZip();zip.addLocalFolder(sourceFolder);zip.writeZip(destZip);
}

【unzip】

首先准备一个zip包,里面有一个test.js文件,如下

使用如下代码解压缩:

var admZip = require('adm-zip');
​
/*** unzip*   zipFile,待解压缩的zip文件*   destFolder,解压缩后存放的文件夹*/
function unzip(zipFile, destFolder){var zip = new admZip(zipFile);zip.extractAllTo(destFolder, true);
}
​
/*** test*/
function test(){var zipFile     = 'd:/zip/demo02/test.zip';var destFolder  = 'd:/zip/demo02';unzip(zipFile, destFolder);
}
test();

解压缩正常

【unzip-中文乱码】

但是当zip中的文件名包含中文的时候就有问题,解压缩后文件名为乱码

找一个带有中文文件名的文件压缩为zip,使用之前代码解压缩

解压缩后的文件为乱码

查找了官方github上的issues,提这个问题的比较多,然而遗憾的是官方并没有fix,只是有人提供的解决方法,详见:https://github.com/cthackers/adm-zip/issues/75

按以上方法修改代码后,用以下代码解压缩,

var admZip   = require('adm-zip');
var iconv    = require('iconv-lite');
​
/*** unzip*   zipFile,待解压缩的zip文件*   destFolder,解压缩后存放的文件夹*/
function unzip(zipFile, destFolder){var zip = new admZip(zipFile);var zipEntries = zip.getEntries();for(var i=0; i<zipEntries.length; i ++){var entry = zipEntries[i];entry.entryName = iconv.decode(entry.rawEntryName, 'gbk');}zip.extractAllTo(destFolder, true);
}
​
/*** test*/
function test(){var zipFile     = 'd:/zip/demo01/demo01.zip';var destFolder  = 'd:/zip/demo01';unzip(zipFile, destFolder);
}
test();

使用该代码解压缩后,文件名正确无乱码

但是这个fix方法需要引入一个新包iconv-lite,而且只能解决解压缩的中文文件名乱码问题,压缩时中文文件名还是有乱码。

【zip file】

首先准备一个test.js文件,使用如下代码压缩

var admZip = require('adm-zip');
​
/*** zip file*   sourceFile,待压缩的文件*   destZip,压缩后的zip文件*/
function zipFile(sourceFile, destZip){var zip = new admZip();zip.addLocalFile(sourceFile);zip.writeZip(destZip);
}
​
/*** test*/
function test(){var sourceFile    = 'd:/zip/demo03/test.js';var destZip       = 'd:/zip/demo03/test.zip';zipFile(sourceFile, destZip);
}
test();

压缩文件正常

但是如果文件名中带中文,例如test-你好.js压缩后是乱码,如下

【zip folder】

准备一个有多层级,多文件的文件夹,如下

使用如下代码压缩这个文件,

var admZip = require('adm-zip');
​
/**
* zip folder
*   sourceFolder,待压缩的文件夹
*   destZip,压缩后的zip文件
*/
function zipFolder(sourceFolder, destZip){var zip = new admZip();zip.addLocalFolder(sourceFolder);zip.writeZip(destZip);
}
​
/*** test*/
function test(){var sourceFolder    = 'd:/zip/demo04/test';var destZip         = 'd:/zip/demo04/test.zip';zipFolder(sourceFolder, destZip);
}
test();

压缩文件夹正常

中文乱码问题,同上,如果文件夹中的文件名带有中文,压缩后是乱码,目前没有找到什么好的解决方案

【中文文档】

adm-zip自带文档排版混乱,而且没有中文版本,详见:https://github.com/cthackers/adm-zip/wiki/ADM-ZIP

翻译了一份中文文档,详见:https://github.com/insistime/qiao.plugin.zip/tree/master/test/adm-zip

【end】

1.介绍了adm-zip的常见使用方法unzip,zipFile,zipFolder

2.介绍了adm-zip解压缩时中文乱码的解决方法

3.nodejs下压缩和解压缩最终方案见后续文章

adm-zip是nodejs上同时支持压缩和解压缩为数不多的npm包,而且下载量大,方法简单易上手,奈何维护不积极,最后一次提交为3个月前,目前有118个未解问题,其中中文文件名乱码算是硬伤~

nodejs解压缩zip文件:adm-zip相关推荐

  1. linux 解压缩压缩文件(zip、rar、7z、tar)

    ____tz_zs 一.zip unzip [选项] 压缩文件名.zip 各选项的含义分别为 : -x 文件列表 解压缩文件,但不包括指定的file文件. -v 查看压缩文件目录,但不解压. -t 测 ...

  2. python打开zip文件_Python ZIP 文件创建与读取

    Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 ZipFile 对象.ZipFile 接受一个字符串格式压缩包名称作为它的 ...

  3. python压缩教程_如何使用Python压缩/解压缩zip文件?(代码示例)

    在批量交换大文件和多个文件时,使用zip文件是非常方便的.下面本篇文章就来带大家认识解一下zip文件,介绍使用Python压缩或解压缩zip文件的方法,希望对大家有所帮助.[视频教程推荐:Python ...

  4. Linux的压缩/解压缩文件命令 zip 和 tar

    Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...

  5. java zip 文件夹_Java Zip文件文件夹示例

    java zip 文件夹 Today we will look into java zip file example. We will also compress a folder and creat ...

  6. Java 压缩与解压zip文件

    一.压缩文件大致可以分为三种:ZIP.JAR.GZ. 压缩流 在日常中经常会使用到像WinRAR或WinZIP这样的压缩文件,通过这些软件可以把一个很大的文件进行压缩以方便传输. 在JAVA中,为了减 ...

  7. linux的解压zip文件,linux解压zip文件命令是什么

    linux解压zip文件命令是什么 发布时间:2020-04-23 11:02:45 来源:亿速云 阅读:162 作者:小新 今天小编给大家分享的是linux解压zip文件命令是什么,相信很多人都不太 ...

  8. cmd解压zip文件

    自动化脚本执行过程中需要分析log,遇到压缩文件时需要先将文件解压,Ubuntu系统自带解压缩,但windows需要自己下载配置,以下是Windows系统中安装使用解压缩的方法: 一.安装 1.下载u ...

  9. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )

    文章目录 一.判定是否是第一次启动 二.递归删除文件操作 三.解压 Zip 文件操作 四.解压操作相关代码 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | ...

  10. php读取zip文件,php如何读取zip内容?(zip_entry_read函数的使用)

    本篇文章主要给大家介绍PHP如何从打开的 zip 档案中获取内容,那么在PHP中有一个内置函数可以实现,即zip_entry_read()函数. zip_entry_read()函数是PHP中内置的函 ...

最新文章

  1. 动态使用webservice,以及含有ref类型的参数的问题
  2. 为什么我不再推荐使用 MVC 框架?
  3. Angular Filter实现页面搜索
  4. 51nod 1851 俄罗斯方块(思维题)
  5. if test 多条件_秒懂Python编程中的if __name__ == #x27;main#x27; 作用和原理
  6. 《数据库系统概论》错题集
  7. 4 合并grid列_在 Power BI Desktop 中合并数据
  8. sqlServer基础知识
  9. iphone app 破解网站集
  10. Matlab画图线型、符号及颜色设置
  11. Win7和XP操作系统显示文件扩展名
  12. python 对 PDF 的拆分 和合并
  13. zuiqingchun4
  14. 掘金茅台,三位投资客的暴富人生
  15. java同一秒请求多次接口_java – 限制用户每秒发出有限的请求
  16. 为chrome浏览器单独设置代理服务器
  17. AD2428W手册解读之操作与配置
  18. SDUT 2504 多项式求和
  19. 川土微 数字隔离器 CA-IS3722HS可替代ADUM1201ARZ
  20. python中description_python中cursor.description什么意思

热门文章

  1. 创建table表格总有一些线比其他线粗
  2. phpstrom安装,配置,激活教程,以及使用lanyu的激活码,报错1653219,解决办法
  3. 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28
  4. 数学 余式定理 简介
  5. python零基础电子书免费下载-零基础入门学习Python PDF 扫描版
  6. BaseFX 实习小记(一)
  7. python 跳过_如果文件已经存在,Python将跳过一个函数
  8. 邓俊辉数据结构与算法学习笔记-第四章
  9. 怎样恢复计算机到桌面,电脑任务栏怎么还原到下面 电脑任务栏还原方法【图文】...
  10. 使用vscode开发apicloud