使用nodejs

时间:2016-09-05 20:32:27

标签: node.js compression buffer zlib fs

我试图使用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

1 个答案:

答案 0 :(得分:0)

Deflate vs. gzip可能令人困惑,所以请仔细检查它是哪一个。

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

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

如果您确实需要控件及其缩小但未gzip,并且想要使用当前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);