用 nodejs 给压缩包充气

Inflate a compressed with nodejs

我正在尝试使用 Zlib 库解压缩文件,但最终似乎只解压缩了前 8 个字节,我搜索了所有软件但找不到解决方案,我怎样才能获得整个数据?

这里是代码:

var zlib = require('zlib');
fs = require('fs')
fs.open('./file1.ff', 'r', function(status, fd) {
    if (status) {
        console.log(status.message);
        return;
    }
    var bufferOrig = new Buffer(100);
    fs.read(fd, bufferOrig, 0, bufferOrig.length, 76, function(err, num) {
        console.log(bufferOrig);
        zlib.inflate(bufferOrig, {
            finishFlush: zlib.Z_SYNC_FLUSH
        }, function(err, bufferDef) {
            if (!err) {
                console.log(bufferDef);
                fs.writeFile("./file2.ff", bufferDef, function(err) {
                    if (err) return console.log(err);
                    console.log("The file was saved!");
                });
            } else console.log('inflate error: ' + err);
        });
    });
});

原始缓冲区:

Buffer 78 9c ec dd 07 5c 14 d7 da 07 e0 b3 4b 47 84 a5 59 a3 2e 0b a2 58 81 05 7b a1 da 75 7a 9f 11 a9 76 17 a9 36 58 54 2c a9 6a ec d1 18 8d dd 18 35 f6 96 ...

膨胀的缓冲区(只有 8 个字节??):

Buffer f0 a0 f6 ff 26 4c 00 00

Deflate 与 gzip 可能会混淆,因此请仔细检查它是哪一个。

如果您只是想压缩或解压缩文件,也许使用一个在给定文件名的情况下一步完成的模块会更简单。如果它是一个 .gz 文件,那么这个简单的东西可能会起作用:

require('gunzip-file')('example.json.gz', 'example.json');

如果您确实需要该控件及其压缩但未压缩的控件,并且想使用当前 Node 版本中内置的 zlib,请在页面顶部附近解释 https://nodejs.org/api/zlib.html#zlib_zlib

const inflate = zlib.createInflate();
const fs = require('fs');
const inp = fs.createReadStream('file1.ff');
const out = fs.createWriteStream('file1_inflated.ff');

inp.pipe(inflate).pipe(out);