簡體   English   中英

在JavaScript中解壓縮Gzip緩沖區

[英]Uncompressing Gzip buffer in JavaScript

我有一個由php函數gzcompress壓縮的數據緩沖區,我需要在js(nodejs)中解壓縮它。

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

我已經嘗試過https://nodejs.org/api/zlib.html#zlib_class_zlib_gunzip中的 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);
                }
            });

我究竟做錯了什么?

您在混淆格式。 PHP函數的可怕命名助您一臂之力。 PHP的gzcompress()產生zlib格式,而node.js的gunzip期望使用gzip格式。 您可以改用PHP中的gzencode()生成gzip格式,也可以使用node.js的zlib.inflate解壓縮zlib格式。

我試圖縮小shell命令的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

並在Node中檢索數據:

const zlib = require('zlib');

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM