gpt4 book ai didi

javascript - 如何使用流在 node.js 中提取 .tar.bz2?

转载 作者:行者123 更新时间:2023-11-30 06:30:57 27 4
gpt4 key购买 nike

我正在尝试在 node.js 中提取一些 .tar.bz2 文件。我正在 npm、github 和 teh google 中搜索这里,但没有现成的解决方案。

我的文件每个大约 25 MB,所以我认为最好的方法是在管道流中使用 tar模块(类似于你如何使用 node.js 的内置 ZLib 库中的 Gunzip for .tar.gz)。这样我也可以使用 request 直接从管道 http 中提取。 .

我找到了 https://github.com/Woodya/node-gzbz2 (并且它有许多重命名的 fork ,如 gzbz )但它们需要使用 node-gyp 构建外部依赖项.我不想使用这些,因为我正在构建的模块必须仅使用 npm 在 linux、mac 和 windows 上正常工作,而不依赖于 python 等外部库。

或者我看看https://github.com/cscott/seek-bzip (及其来源)我喜欢它是纯 javascript,但它只解码缓冲区。

有人可以告诉我去这里的路吗?

编辑:seek-bzip 的作者请创建一个包装器将他的同步流转换为异步流,但此修复取决于 node-fibers再次使用 node-gyp这对我来说是不可取的。参见 https://github.com/cscott/seek-bzip/issues/1

edit2:我仍在寻找跨平台解决方案,但这里有一个使用 CLI 命令的快速方法:

var cmd = 'bunzip2 -c ' + sourceFile + ' | (cd ' + targetDir + '; tar -xf -)';

require('child_process').exec(cmd, function (err, stdout, stderr) {
if (err) {
// bad
}
// yea!
});

最佳答案

我觉得这个问题真的是 2 个问题:如何解密 bz2 和如何解压缩。我会回答untaring部分。 tar-stream模块是一个很好的模块:

var tar = require('tar-stream')    

var extract = tar.extract();
extract.on('entry', function(header, stream, callback) {
// make directories or files depending on the header here...
// call callback() when you're done with this entry
});

fs.createReadStream("something.tar").pipe(extract)

extract.on('finish', function() {
console.log('done!')
});

关于javascript - 如何使用流在 node.js 中提取 .tar.bz2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17734140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com