如何在Node.js中解压缩gzip文件

7

我想在Node.js中解压gzip文件,我尝试了[一些]包但没有一个有效。你能提供一个带有示例代码的包来在Node.js中解压缩gzip文件吗?


你尝试了哪些包?有什么问题或错误吗?zlib.Gunzip 可以做到这一点。 - Antoine C.
你能给我展示一下zlib.gunzip的代码吗?因为我找不到zlib.gunzip的示例。 - Malik Kamran Abid
4个回答

10

gunzip-file 节点包运行良好!

请执行以下操作:

npm install gunzip-file

然后:

'use strict'

const gunzip = require('gunzip-file')

// 'sitemap.xml.gz' - source file
// 'sitemap.xml'    - destination file
// () => { ... }    - notification callback
gunzip('sitemap.xml.gz', 'sitemap.xml', () => {
  console.log('gunzip done!')
})

最后,在你的命令行中使用Node运行。

好的,明白了。我正在添加目标路径,但不知道目标路径是否需要文件名。 - Malik Kamran Abid
我已经在项目的根目录下使用了源文件和目标文件,因此,在这种情况下,路径由Node.js环境给出。 - ranieribt
1
请注意,gzip/gunzip自Node 0.5.8以来一直是标准库“zlib”模块的一部分,实际上从一开始就是Node的一部分。安装单独的软件包来执行Node已经本地支持的操作有点儿傻 =) - Mike 'Pomax' Kamermans
是的,@Mike'Pomax'Kamermans,最近版本的Node替换了几个其他天有用的NPM库。 - ranieribt
当然,但这在这种情况下不适用:zlib 已经在 Node v0.5.8 中添加,该版本于2011年末发布。这比此答案发布的时间早了许多年。无论是2012年、2017年还是2022年,都不需要第三方包 =) - Mike 'Pomax' Kamermans

4
我建议使用zlib.Gunzip
函数原型是zlib.Gunzip(buf,callback)。第一个参数是您想要提取的原始归档数据作为缓冲区,第二个参数是接受两个参数(结果和错误)的回调函数。
实现如下:
zlib.Gunzip(raw_data, function (error, result) {
   if (error) throw error;
   // Access data here through result as a Buffer
})

3
它显示“不正确的标题检查”,位于Zlib._handle.onerror (zlib.js:355:17)。 - Malik Kamran Abid
你是如何创建raw_data的? - Antoine C.
@MalikKamranAbid 还有,你确定存档没有损坏吗? - Antoine C.
是的,我确定。我已经提取了它,它运行得很好,但是当我通过node.js执行时,它不起作用。 - Malik Kamran Abid
请记住,归档文件具有整个文件系统,而gzip流是压缩数据。归档文件可能具有完全不同的头值,解压缩流可能会稍后开始。 - Patrick Sturm

0

3
你应该添加代码本身,而不是它的图片 - Nben

0

您可以使用tar.gz npm包来解决这个问题。

编写以下方法将其提取到特定路径:

targz().extract('/bkp/backup.tar.gz', '/home/myuser')
  .then(function(){
    console.log('Job done!');
  })
  .catch(function(err){
    console.log('Something is wrong ', err.stack);
  });

如需更多详细信息,请访问链接


1
错误:无效签名:0x8088b1f。我猜它只适用于zip格式的文件。 - Malik Kamran Abid
你试过这个吗? - Malik Kamran Abid
1
这个包已经被弃用,不再维护。 不应该使用它。 请使用 https://www.npmjs.com/package/tar。 - lilotop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接