2016-09-05 3 views
1

Im пытается распаковать файл с использованием библиотеки Zlib, но, наконец, кажется, что он распаковывает только первые 8 байтов, я ищу все, но не могу найти решение, как я могу получить все данные?Надуйте сжатый узел nodejs

Вот код:

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 
+0

Вы пытались открыть его асинхронно? – Jaime

+0

no i didnt, и я не знаю, как это сделать, im new в nodejs:/ – han0idx

ответ

0

выкачивает против GZIP может сбивать с толку, так дважды проверьте, какой именно.

Если вы просто пытаетесь уничтожить или распаковать файлы, возможно, было бы проще использовать модуль, который делает это за один шаг, учитывая имена файлов. Если это .gz файл, что-то это просто может работать:

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

Если вы на самом деле нужен контроль и его спущенный, но не архивированные, и хотите использовать 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); 
+0

Большое спасибо, второй ответ был хорошим, последний вопрос, знаете ли вы, как начать читать «file1.ff» в байтовом индексе 72 ? – han0idx

+0

Возможно с inp.read (72)? Возможно, прежде чем позвонить в трубку. Но вам, возможно, придется сначала перенести его в режим паузы/без потока (затем вернуть его обратно к потоку)? https://nodejs.org/api/stream.html#stream_readable_read_size –

+0

Хорошо, я попробую, Cheers;) – han0idx

Смежные вопросы