Распаковка буфера Gzip в JavaScript

У меня есть сжатый буфер данных с помощью функции php gzcompress, и мне нужно распаковать его в js (nodejs).

gzcompress(serialize($slot[$i]['advanced_details']),8)

Я пробовал Класс: zlib.Gunzip из https://nodejs.org/api/zlib.html#zlib_class_zlib_gunzip

Но это бросает:

{ [Error: incorrect header check] errno: -3, code: 'Z_DATA_ERROR' }

Полный буфер Вот

Мой код:

nodeZlib.gunzip(rows[0]['Slot'+(i+1)+'AdvancedDetails'], 8, function(error, data) {
if(!error) {
console.log = data.toString();
} else {
console.log('Error unzipping:');
console.log(error);
}
});

Что я делаю неправильно?

0

Решение

Вы путаете форматы. Вашей путанице помогает ужасное именование функций в PHP. РНР gzcompress() создает формат zlib, тогда как файл node.js gunzip ожидает формат GZIP. Вы могли бы использовать gzencode() вместо этого в PHP, чтобы сгенерировать формат gzip, или вы можете использовать node.js zlib.inflate распаковать формат zlib.

2

Другие решения

Я пытался минимизировать вывод json из команды оболочки. Это было слишком долго без кодирования.

Решение, к которому я прибыл:

$content = ['sample', 'data'];

$data = base64_encode(gzencode(
json_encode($content, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE),
8,
FORCE_DEFLATE
));

// then send $data to node

и получить данные в узле:

const zlib = require('zlib');

let data = zlib.inflateSync(new Buffer(data.min, 'base64')).toString();
0

По вопросам рекламы [email protected]