zlib.js decompress Uncaught Error: input buffer is broken

JavaScript07

zlib.js decompress Uncaught Error: input buffer is broken,第1张

你的var a 是个字符串?

var b = new Zlib.Deflate(plain)

plain = Array.<number>or Uint8Array

所以需要把a变量的字符串转换成 Uint8Array

var uint8array = new TextEncoder("utf-8").encode(a)

所以 再把转换的传人new Zlib.Deflate.

附图Github的官方例子:

我请求管用所结束httpvar http = require("http"),

zlib = require("zlib")

function getGzipped(url, callback) {

// buffer to store the streamed decompression

var buffer = []

http.get(url, function(res) {

// pipe the response into the gunzip to decompress

var gunzip = zlib.createGunzip()

res.pipe(gunzip)

gunzip.on('data', function(data) {

// decompression chunk ready, add it to the buffer

buffer.push(data.toString())

}).on("end", function() {

// response and decompression complete, join the buffer and return

callback(null, buffer.join(""))

}).on("error", function(e) {

callback(e)

})

}).on('error', function(e) {

callback(e)

})

}

getGzipped(url, function(err, data) {

console.log(data)

})

2. 尝试添加encoding: null给传递给选项request避免载体转换字符串并保持二进制缓冲区

3. 工作示例(使用节点请求模块)gunzips响应function gunzipJSON(response){

var gunzip = zlib.createGunzip()

var json = ""

gunzip.on('data', function(data){

json += data.toString()

})

gunzip.on('end', function(){

parseJSON(json)

})

response.pipe(gunzip)

}

全码:

4. 像@Iftah说设置encoding: null 完整例(少错误处理):request = require('request')

zlib = require('zlib')

request(url, {encoding: null}, function(err, response, body){

if(response.headers['content-encoding'] == 'gzip'){

zlib.gunzip(body, function(err, dezipped) {

callback(dezipped.toString())

}

} else {

callback(body)

}

})