2013-03-20 281 views
16

我正在潜入Node.js的Zlib。我能够使用提供的示例(http://nodejs.org/api/zlib.html#zlib_examples)压缩和解压缩文件,但是我无法找到更多关于对文件夹执行相同操作的内容吗?Node.js - 压缩/解压缩文件夹

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

任何想法如何使用Node.js压缩(然后解压缩)整个文件夹(尊重子焊接层次结构)?

谢谢。

+1

Zlib只是压缩,你想tar一个文件夹然后压缩它,整个tar.gz的东西,试试https://github.com/isaacs/node-tar – generalhenry 2013-03-20 17:29:15

+0

哦,我明白了!所以,我需要分两步进行:1 /将文件夹转换为.tar文件,然后使用Zlib将.tar文件压缩为.tar.gz。 'node-tar'模块没有很好的文档记录,你有没有额外的资源? – htaidirt 2013-03-20 17:42:12

+1

我看了一下,我发现的最好的是https://github.com/cthackers/adm-zip – generalhenry 2013-03-20 18:17:03

回答

25

我终于知道了,与@generalhenry的帮助(请参阅有关问题的评论)和

如在评论中提到的,我们需要在文件夹中的两个步骤压缩:

  1. 转换的文件夹为.tar文件

  2. 的压缩文件.tar

为了完成第一步,我需要两个Node.js的模块:

npm install tar 
npm install fstream 

第一个允许我们创建.tar文件。您可以在这里访问源代码https://github.com/isaacs/node-tar

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

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

下面是最终代码:

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

2更多的事情来压缩整个文件夹:

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

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

3

您可以使用tar-stream模块创建一个tar归档文件。它更灵活,比节点焦油在简单:

  • 您可以将文件添加到压缩文件(不只是目录,这是节点焦油的限制)
  • 它的工作原理与普通节点的文件系统流(节点焦油奇怪需要使用fstream的模块)
  • 它相当完整的文档(节点焦油是不是有据可查)
  • 你可以没有击中文件系统创建归档

创建柏油 归档,然后使用zlib压缩,然后将其写入任何地方(网络,文件系统等)。

+0

你能提供关于tar-stream说/展示它可以使用节点文件系统('fs')流的文档。我似乎无法找到任何。 – 2016-04-05 18:01:10

+0

在这一点上,我正在用这个模块练习。也许这会有帮助? https://github.com/mafintosh/tar-stream/issues/8 – 2016-04-05 19:16:05