如何用JavaScript+node-gzip压缩Blob二进制文件?报错修复
修复Blob压缩时的"Illegal invocation"错误
错误原因
你踩了两个关键坑:
- 直接把
fileblobA.arrayBuffer这个方法引用传给了gzip,既没调用方法,又因为方法脱离Blob实例上下文执行,触发了"Illegal invocation"错误。 Blob.arrayBuffer()是异步方法,返回的是Promise,不能直接把这个Promise丢给gzip处理,得先等它解析出真实的ArrayBuffer数据。
修复后的代码
先调用arrayBuffer()并await拿到数据,再把ArrayBuffer转成node-gzip支持的格式(比如Uint8Array或Buffer),再传给gzip:
const fileblobA = new Blob([result],{type:'application/octet-stream'}) const { gzip, ungzip } = require('node-gzip'); // 先await获取实际的ArrayBuffer数据 const arrayBuffer = await fileblobA.arrayBuffer(); // 转成Uint8Array传给gzip const gzipA = await gzip(new Uint8Array(arrayBuffer));
补充说明
如果是在Node.js环境下,也可以把ArrayBuffer转成Buffer:
const buffer = Buffer.from(arrayBuffer); const gzipA = await gzip(buffer);
两种转换方式都能被node-gzip正常处理。
内容的提问来源于stack exchange,提问作者kn11n
相关产品推荐
相关产品推荐

