Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js-压缩/解压缩文件夹_Node.js_Zlib - Fatal编程技术网

Node.js-压缩/解压缩文件夹

Node.js-压缩/解压缩文件夹,node.js,zlib,Node.js,Zlib,我正在深入研究node.js的Zlib。我能够使用提供的示例()压缩和解压缩文件,但是我找不到更多关于对文件夹执行相同操作的信息 一种可能性(但我认为是修补)是使用节点zip 模块,并逐个添加文件夹的所有文件。但是解压时我会遇到一个问题(在这种情况下,我会丢失文件夹) 知道如何使用Node.js压缩(然后解压缩)整个文件夹(关于子焊料层次结构)吗 谢谢。在@generalhenry的帮助下(参见对问题的评论),我终于得到了它 如评论中所述,我们需要分两步压缩文件夹: 将文件夹转换为.tar文件

我正在深入研究node.js的Zlib。我能够使用提供的示例()压缩和解压缩文件,但是我找不到更多关于对文件夹执行相同操作的信息

一种可能性(但我认为是修补)是使用<代码>节点zip 模块,并逐个添加文件夹的所有文件。但是解压时我会遇到一个问题(在这种情况下,我会丢失文件夹)

知道如何使用Node.js压缩(然后解压缩)整个文件夹(关于子焊料层次结构)吗


谢谢。

在@generalhenry的帮助下(参见对问题的评论),我终于得到了它

如评论中所述,我们需要分两步压缩文件夹:

  • 将文件夹转换为
    .tar
    文件

  • 压缩
    .tar
    文件

  • 为了执行第一步,我需要两个node.js模块:

    npm install tar
    npm install fstream
    
    第一个允许我们创建
    .tar
    文件。您可以在这里访问源代码

    第二个节点模块将帮助我们读取文件夹和写入文件。关于基本的
    fs
    node.js模块,我不知道是否可以读取目录(我不是说使用
    fs.readdir
    获取数组中的所有文件,而是处理文件夹中的所有文件及其组织)

    然后,当我将文件夹转换为
    .tar
    文件时,我可以使用
    Zlib
    Gzip()
    对其进行压缩

    以下是最终代码:

    var fstream = require('fstream'),
        tar = require('tar'),
        zlib = require('zlib');
    
    fstream.Reader({ 'path': 'path/to/my/dir/', 'type': 'Directory' }) /* Read the source directory */
    .pipe(tar.Pack()) /* Convert the directory to a .tar file */
    .pipe(zlib.Gzip()) /* Compress the .tar file */
    .pipe(fstream.Writer({ 'path': 'compressed_folder.tar.gz' })); /* Give the output file name */
    
    这有助于我使用node.js压缩整个文件夹

    还有两件事:

    • 如您所见,缺少关于
      tar
      模块的文档。我希望这将很快得到改进,因为提供的两个示例讨论了如何从
      .tar
      文件中提取内容

    • 我使用了
      fstream
      模块来帮助我处理源目录。是否可以使用
      fs
      绕过此问题?我不知道(如果你有想法,请评论)

    您可以使用该模块创建tar存档。它比节点tar更灵活、更简单,因为:

    • 您可以将文件添加到存档(而不仅仅是目录,这是节点tar的一个限制)
    • 它适用于普通的节点文件系统流(节点tar奇怪地需要使用fstream模块)
    • 它的文档记录非常完整(节点tar没有很好的文档记录)
    • 您可以创建一个归档文件,而无需访问文件系统

    创建tar归档文件,然后使用zlib压缩它,然后将其写入任意位置(网络、文件系统等)。

    提供自2013年以来更新的答案

    为了获得相同的结果,代码更加简单明了:

    const tar = require("tar"); // version ^6.0.1
    const fs = require("fs");
    
    tar.c(
      {
        gzip: true // this will perform the compression too
      },
      ["path/to/my/dir/"]
    ).pipe(fs.createWriteStream('path/to/my/dir.tgz'));
    

    无需显式使用
    zlib

    zlib只是一种通信,你想对一个文件夹进行tar,然后对其进行压缩,整个tar.gz的事情,试试看哦,我明白了!因此,我需要分两步完成:1/将文件夹转换为
    .tar
    文件,然后2/使用Zlib将
    .tar
    文件压缩为
    .tar.gz
    节点tar
    模块没有很好的文档记录,您有其他资源吗?我看了一下,我发现最好的是您能提供tar流说明/显示它可以在哪里使用节点文件系统(“fs”)流的文档。我似乎找不到任何东西。我现在已经不习惯使用这个模块了。也许这会有帮助?