You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java压缩消息至Azure函数EventHub触发器pako解压报incorrect header check错误求助

问题分析与解决方案

错误根源

incorrect header check 错误说明TypeScript侧接收到的字节流并非合法的GZIP格式。核心原因是:

  • Java侧发送的是压缩后的二进制字节数组,EventHub在传输二进制数据时会自动将其编码为Base64字符串。
  • 当前代码直接将收到的字符串按UTF-8转成Buffer,相当于把Base64字符串的字符字节当成了GZIP原始字节,导致解压缩时头部校验失败。

修复步骤

1. 修正二进制解码逻辑

修改decompressBuf方法,将收到的Base64字符串解码为原始GZIP二进制字节:

decompressBuf(message: string, context?: InvocationContext): MessageObj {
  // 关键:指定Base64编码解码,还原原始压缩字节
  const decodedMessage = Buffer.from(message, 'base64');  
  return this.decom(new Uint8Array(decodedMessage), context);
}

2. 简化文本解码(可选优化)

用Node.js原生TextDecoder替代第三方TextDecoderLite,减少依赖并提升兼容性:

decom(message: Uint8Array, context?: InvocationContext): MessageObj {
  const resultGZipArray = pako.ungzip(message);
  const text = new TextDecoder('utf-8').decode(resultGZipArray);       
  return JSON.parse(text) as MessageObj;
}

3. 验证发送端编码(可选排查)

确认Java侧发送到EventHub的是压缩后的原始字节数组,没有额外做Base64编码。如果Java侧误将字节数组转成了字符串再发送,会导致双重编码,同样引发错误。

排查验证技巧

在EventTrigger中先打印收到的message前10个字符:

console.log('Received message prefix:', message.slice(0, 10));

合法的GZIP Base64字符串通常以H4sI开头,若输出符合这个特征,说明Base64解码的方向正确。

内容的提问来源于stack exchange,提问作者mshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:46