nodejs解压缩zip文件:adm-zip
【简介】
包名: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相关推荐
- linux 解压缩压缩文件(zip、rar、7z、tar)
____tz_zs 一.zip unzip [选项] 压缩文件名.zip 各选项的含义分别为 : -x 文件列表 解压缩文件,但不包括指定的file文件. -v 查看压缩文件目录,但不解压. -t 测 ...
- python打开zip文件_Python ZIP 文件创建与读取
Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 ZipFile 对象.ZipFile 接受一个字符串格式压缩包名称作为它的 ...
- python压缩教程_如何使用Python压缩/解压缩zip文件?(代码示例)
在批量交换大文件和多个文件时,使用zip文件是非常方便的.下面本篇文章就来带大家认识解一下zip文件,介绍使用Python压缩或解压缩zip文件的方法,希望对大家有所帮助.[视频教程推荐:Python ...
- Linux的压缩/解压缩文件命令 zip 和 tar
Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...
- java zip 文件夹_Java Zip文件文件夹示例
java zip 文件夹 Today we will look into java zip file example. We will also compress a folder and creat ...
- Java 压缩与解压zip文件
一.压缩文件大致可以分为三种:ZIP.JAR.GZ. 压缩流 在日常中经常会使用到像WinRAR或WinZIP这样的压缩文件,通过这些软件可以把一个很大的文件进行压缩以方便传输. 在JAVA中,为了减 ...
- linux的解压zip文件,linux解压zip文件命令是什么
linux解压zip文件命令是什么 发布时间:2020-04-23 11:02:45 来源:亿速云 阅读:162 作者:小新 今天小编给大家分享的是linux解压zip文件命令是什么,相信很多人都不太 ...
- cmd解压zip文件
自动化脚本执行过程中需要分析log,遇到压缩文件时需要先将文件解压,Ubuntu系统自带解压缩,但windows需要自己下载配置,以下是Windows系统中安装使用解压缩的方法: 一.安装 1.下载u ...
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )
文章目录 一.判定是否是第一次启动 二.递归删除文件操作 三.解压 Zip 文件操作 四.解压操作相关代码 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | ...
- php读取zip文件,php如何读取zip内容?(zip_entry_read函数的使用)
本篇文章主要给大家介绍PHP如何从打开的 zip 档案中获取内容,那么在PHP中有一个内置函数可以实现,即zip_entry_read()函数. zip_entry_read()函数是PHP中内置的函 ...
最新文章
- 动态使用webservice,以及含有ref类型的参数的问题
- 为什么我不再推荐使用 MVC 框架?
- Angular Filter实现页面搜索
- 51nod 1851 俄罗斯方块(思维题)
- if test 多条件_秒懂Python编程中的if __name__ == #x27;main#x27; 作用和原理
- 《数据库系统概论》错题集
- 4 合并grid列_在 Power BI Desktop 中合并数据
- sqlServer基础知识
- iphone app 破解网站集
- Matlab画图线型、符号及颜色设置
- Win7和XP操作系统显示文件扩展名
- python 对 PDF 的拆分 和合并
- zuiqingchun4
- 掘金茅台,三位投资客的暴富人生
- java同一秒请求多次接口_java – 限制用户每秒发出有限的请求
- 为chrome浏览器单独设置代理服务器
- AD2428W手册解读之操作与配置
- SDUT 2504 多项式求和
- 川土微 数字隔离器 CA-IS3722HS可替代ADUM1201ARZ
- python中description_python中cursor.description什么意思
热门文章
- 创建table表格总有一些线比其他线粗
- phpstrom安装,配置,激活教程,以及使用lanyu的激活码,报错1653219,解决办法
- 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28
- 数学 余式定理 简介
- python零基础电子书免费下载-零基础入门学习Python PDF 扫描版
- BaseFX 实习小记(一)
- python 跳过_如果文件已经存在,Python将跳过一个函数
- 邓俊辉数据结构与算法学习笔记-第四章
- 怎样恢复计算机到桌面,电脑任务栏怎么还原到下面 电脑任务栏还原方法【图文】...
- 使用vscode开发apicloud