精华内容
下载资源
问答
  • npm install archiver var zipper = require("zip-local");...zipper.sync.zip("/Users/xxx/xx/xx").compress().save("/Users/xxx/xx/xx.zip"); 转载于:https://www.cnblogs.com/mashixun/p/9675445.html

    npm install archiver

     

    var zipper = require("zip-local");

    zipper.sync.zip("/Users/xxx/xx/xx").compress().save("/Users/xxx/xx/xx.zip");

    转载于:https://www.cnblogs.com/mashixun/p/9675445.html

    展开全文
  • ​【简介】 ...3.支持多种压缩格式,压缩方式也比较灵活 【完整代码】 包含了zipFile方法,zipFolder方法 var fs = require('fs'); var path = require('path'); var archiver = require('archiver..

    ​【简介】

    包名:archiver

    版本:3.0.0

    依赖包数:7个

    周下载量:110w

    未解问题:40个

    最后更新:6个月前

     

    【总结】

    1.下载量大

    2.支持压缩,不支持解压缩

    3.支持多种压缩格式,压缩方式也比较灵活

     

    【完整代码】

    包含了zipFile方法,zipFolder方法

    var fs      = require('fs');
    var path    = require('path');
    var archiver  = require('archiver');
    ​
    /**
     * zip file
     *   sourceFile,待压缩的文件
     *   destZip,压缩后的zip文件
     *   cb,callback
     */
    function zipFile(sourceFile, destZip, cb){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function(){
        cb(null, 'zip file success!');
      });
      archive.on('error', function(err){
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.file(sourceFile, {
        name : path.basename(sourceFile)
      });
      archive.finalize();
    }
    ​
    /**
    * zip folder
    *   sourceFolder,待压缩的文件夹
    *   destZip,压缩后的zip文件
    *   cb,回调函数
    *   subdir,是否需要包一层
    */
    function zipFolder(sourceFolder, destZip, cb, subdir){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function() {
        cb(null, 'zip folder success!');
      });
      archive.on('error', function(err) {
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.directory(sourceFolder, subdir ? sourceFolder.substr(path.dirname(sourceFolder).length + 1) : false);
      archive.finalize();
    }

    ​​

    【zip file-简单压缩】

    将d:/test.js压缩到d:/test.zip中

    var fs      = require('fs');
    var archiver  = require('archiver');
    ​
    /**
     * zip file
     *   sourceFile,待压缩的文件
     *   destZip,压缩后的zip文件
     *   cb,callback
     */
    function zipFile(sourceFile, destZip, cb){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function(){
        cb(null, 'zip file success!');
      });
      archive.on('error', function(err){
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.file(sourceFile);
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFile    = 'd:/test.js';
        var destZip       = 'd:/test.zip';
      
        zipFile(sourceFile, destZip, function(err, msg){
          console.log(err, msg);
        });
    }
    test();

     

    效果如下,压缩正常

     

    【zip file-不命名压缩】

    将d:/zip/demo01/test.js压缩到d:/zip/demo01/test.zip中

     

    压缩后的效果如下

    可以看到,test.zip中不是直接包含test.js,而是把test.js之前的层级都压缩进去了,显然不是预期的结果。

     

    【zip file-命名压缩】

    发生以上问题的原因在于这行代码

      // 这行代码,没有传入name属性
      archive.file(sourceFile);
    ​
      // 应该像这样
      archive.file(sourceFile, {
        name : 'test.js'
      });

     

    修改后的代码如下

    var fs      = require('fs');
    var path    = require('path');
    var archiver  = require('archiver');
    ​
    /**
     * zip file
     *   sourceFile,待压缩的文件
     *   destZip,压缩后的zip文件
     *   cb,callback
     */
    function zipFile(sourceFile, destZip, cb){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function(){
        cb(null, 'zip file success!');
      });
      archive.on('error', function(err){
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.file(sourceFile, {
        name : path.basename(sourceFile)
      });
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFile    = 'd:/zip/demo02/test.js';
        var destZip       = 'd:/zip/demo02/test.zip';
      
        zipFile(sourceFile, destZip, function(err, msg){
          console.log(err, msg);
        });
    }
    test();

     

    效果如下,是预期的结果

     

    【zip file-中文压缩】

    之前介绍的另一个nodejs下压缩解压缩的npm包“adm-zip”中存在一个问题,压缩和解压缩包含中文的文件名时会乱码,详见:https://uikoo9.blog.csdn.net/article/details/116381396

     

    archiver会存在这个问题么?

    var fs      = require('fs');
    var path    = require('path');
    var archiver  = require('archiver');
    ​
    /**
     * zip file
     *   sourceFile,待压缩的文件
     *   destZip,压缩后的zip文件
     *   cb,callback
     */
    function zipFile(sourceFile, destZip, cb){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function(){
        cb(null, 'zip file success!');
      });
      archive.on('error', function(err){
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.file(sourceFile, {
        name : path.basename(sourceFile)
      });
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFile    = 'd:/zip/demo03/test-你好.js';
        var destZip       = 'd:/zip/demo03/test.zip';
      
        zipFile(sourceFile, destZip, function(err, msg){
          console.log(err, msg);
        });
    }
    test();

     

    效果如下,archiver不存在中文乱码问题

     

    【zip folder】

    将d:/zip/demo03文件夹压缩到d:/zip/demo04/test.zip中

    var fs      = require('fs');
    var archiver  = require('archiver');
    ​
    /**
    * zip folder
    *   sourceFolder,待压缩的文件夹
    *   destZip,压缩后的zip文件
    *   cb,回调函数
    *   subdir,是否需要包一层
    */
    function zipFolder(sourceFolder, destZip, cb, subdir){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function() {
        cb(null, 'zip folder success!');
      });
      archive.on('error', function(err) {
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.directory(sourceFolder, subdir || false);
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFolder    = 'd:/zip/demo03';
        var destZip         = 'd:/zip/demo04/test.zip';
      
        zipFolder(sourceFolder, destZip, function(err, msg){
          console.log(err, msg);
        });
    }
    test();

     

    效果如下,确实将d:/zip/demo03下的文件压缩到zip中

     

    【zip folder-包含父文件夹】

    上面的例子中,是将d:/zip/demo03文件夹下的文件都压缩到了test.zip中,有的时候需要的是将d:/zip/demo03整个文件夹直接压缩到test.zip中,其实只需要添加一个subdir属性即可

    var fs      = require('fs');
    var archiver  = require('archiver');
    ​
    /**
    * zip folder
    *   sourceFolder,待压缩的文件夹
    *   destZip,压缩后的zip文件
    *   cb,回调函数
    *   subdir,是否需要包一层
    */
    function zipFolder(sourceFolder, destZip, cb, subdir){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function() {
        cb(null, 'zip folder success!');
      });
      archive.on('error', function(err) {
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.directory(sourceFolder, subdir || false);
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFolder    = 'd:/zip/demo03';
        var destZip         = 'd:/zip/demo05/test.zip';
      
        zipFolder(sourceFolder, destZip, function(err, msg){
          console.log(err, msg);
        }, true);
    }
    test();

     

    压缩后的效果如下

     

    【zip folder-命名父文件夹】

    上例中将subdir设置为了true,效果是将所有父文件夹都压缩到了zip中,一般期望的效果是只将父文件夹一层压缩到zip中,这个效果可以通过设置subdir为文件名实现

    var fs      = require('fs');
    var path    = require('path');
    var archiver  = require('archiver');
    ​
    /**
    * zip folder
    *   sourceFolder,待压缩的文件夹
    *   destZip,压缩后的zip文件
    *   cb,回调函数
    *   subdir,是否需要包一层
    */
    function zipFolder(sourceFolder, destZip, cb, subdir){
      // init
      var output = fs.createWriteStream(destZip);
      var archive = archiver('zip', {
          zlib: { level: 9 }
      });
      
      // on
      output.on('close', function() {
        cb(null, 'zip folder success!');
      });
      archive.on('error', function(err) {
        cb(err);
      });
    ​
      // zip
      archive.pipe(output);
      archive.directory(sourceFolder, subdir ? sourceFolder.substr(path.dirname(sourceFolder).length + 1) : false);
      archive.finalize();
    }
    ​
    /**
     * test
     */
    function test(){
        var sourceFolder    = 'd:/zip/demo03';
        var destZip         = 'd:/zip/demo06/test.zip';
      
        zipFolder(sourceFolder, destZip, function(err, msg){
          console.log(err, msg);
        }, true);
    }
    test();

     

    效果如下,zip中只包含了demo03一层文件夹

     

    【文档】

    archiver的文档做的比较好,详见https://archiverjs.com/index.html

     

    【end】

    1.介绍了archiver的常见使用方法zipFile,zipFolder

    2.介绍了archiver压缩文件和文件夹一些常见需求的代码实现

    archiver是nodejs上支持压缩的npm包,下载量大,支持多种格式的压缩,方法简单上手快,文档健全,比较推荐~

    展开全文
  • 1.同时支持压缩和解压缩 2.下载量大,0依赖于其他包 3.文档较弱,未解问题比较多 4.中文文件名乱码 建议:只使用unzip相关方法(fix中文bug后) 【完整代码】 包括unzip方法,zipFile方法,zipFolder方法...

    【简介】

    包名: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个未解问题,其中中文文件名乱码算是硬伤~

     

    展开全文
  • npm install archiver var zipper = require("zip-local"); zipper.sync.zip("/Users/xxx/xx/xx").compress().save("/Users/xxx/xx/xx.zip");

    npm install archiver

     

    var zipper = require("zip-local");

    zipper.sync.zip("/Users/xxx/xx/xx").compress().save("/Users/xxx/xx/xx.zip");

    展开全文
  • nodejszip压缩版安装与配置

    千次阅读 2019-08-27 22:48:01
    下载zip包 https://nodejs.org/zh-cn/download/ 解压 将文件解压到要安装的位置,并新建两个目录 node-global:npm全局安装位置 node-cache:npm 缓存路径 配置环境变量 NODE_PATH=D:\Program Files\node-v10.16.3-...
  • nodejs怎么压缩文件为zip,或者解压缩zip文件,有两个比较成熟的npm库: https://www.npmjs.com/package/adm-zip https://www.npmjs.com/package/archiver 但是两者都有一些问题,下面试简介: admin-zip:...
  • var zipper = require("zip-local"); zipper.sync.zip("./folder").compress().save("./target.zip"); 转载于:https://www.cnblogs.com/ckAng/p/10336825.html
  • nodejs 处理zip文件的上传

    千次阅读 2019-08-25 17:22:32
    nodejs处理zip文件的第三方库有很多,这里我使用的是unzip,可以执行如下命令进行安装: npm install unzip --save 前端我用的是ejs模板: <!DOCTYPE html> <html lang="en"> <head> <...
  • nodejs zip压缩版安装与配置 2 流程 2.1 下载 http://nodejs.cn/download/ 2.2 解压缩 将文件解压到要安装的位置,并新建两个目录 node-global : npm全局安装位置 node-cache : npm 缓存路径 2.3 配置环境变量 将...
  • nodejs zip压缩版安装与配置 下载 下载地址在 https://nodejs.org/zh-cn/download/ 选择 64bit Windows二进制文件 .zip 安装 解压到D盘根目录 并新建两个目录 node-global :npm全局安装位置 node-cache:npm 缓存...
  • 用于NodeJS的ADM-ZIP,并增加了对电子原件-fs的支持 ADM-ZIP是用于zip数据压缩的纯JavaScript实现。 安装 使用可以: $ npm install adm-zip 到底有什么好处呢? 该库使您可以: 将zip文件直接解压缩到磁盘或内存...
  • (1)zip压缩压缩 zip压缩zip -rP{密码} <目标文件.zip> <源文件> //默认覆盖现有文件 zip压缩zip -oP{密码} <源文件.zip> //默认覆盖现有文件 (2)rar压缩压缩 说明: ...
  • nodejs压缩文件

    2017-10-06 16:50:04
    var JSZip = require('jszip'); var fs = require('fs'); var zip = new JSZip(); zip.file('test.txt', 'hello there');...zip.folder("images/img").file("201.gif", fs.readFileSync("../../source/img/201.gif"))
  • nodejs 压缩和解压

    千次阅读 2015-08-04 11:09:20
    var zlib = require('zlib'); var async = require('async'); function gzip(text){ var buf = new Buffer(text); var zipRes = null; async.auto({ zip:function(cb){ zlib.gzi
  • nodejs 压缩文件 archiver

    千次阅读 2016-04-27 16:45:40
    如下代码实现 压缩a文件夹中的所有内容,生成a.zip 文件 cwd:需要压缩源文件的路径 src:需要压缩的文件 ** 是全部文件 dest 是解压后的层级,如果不设置会使用src的全部层级 var archive = archiver('zip'); ...
  • 解压zip包依赖于zip-local npm installzip-local -save 然后 引入并加压zip importzipperfrom'zip-local' 我的使用场景是在上传文件后直接解压,所以直接使用ctx.request.body.files.file.path,unzpi的参数格式...
  • nodejs 压缩版 安装

    2017-12-27 21:32:00
    下载zip 解压 d:/nodejs 创建2个文件夹 node-global node-cache 设置环境变量path d:/nodejs d:/nodejs/node-global npm config set prefix d:/nodejs/node-global npm config set cache d:/...
  • 主要介绍了Nodejs使用archiver-zip-encrypted库加密压缩文件时报错,朋友朋友在测试过程中都出现过异常,下面小编把问题过程分析脚本之家平台,需要的朋友可以参考下
  • nodejs zip 安装配置

    2019-09-26 21:48:27
    2、解压缩 将文件解压到要安装的位置,并新建两个目录 node-global :npm全局安装位置 node-cache:npm 缓存路径 3、配置 配置环境变量: 将node.exe 所在的目录添加到path环境变量,这样我们在使用命令行时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,793
精华内容 1,117
关键字:

nodejs压缩zip