我有一个准系统服务器,用于解析XML文件(从用户定义的URL引用),并将操作数据作为CSV文件输出以供下载。
我正在尝试实施可选的GZIP解压缩:
function loadURL(req, res) {
request.get(req.query.url, function(error, response, body) {
if (req.query.isGzip == 'true') {
zlib.gunzip(body, function(err, dezipped) {
var xmlData = dezipped.toString('utf-8');
parseAndOffload(xmlData, req, res);
});
} else {
parseAndOffload(body, req, res);
}
});
}
尽管测试网址(http://flowercard.co.uk/google_product_feed.xml.gz)是一个包含500kb数据的真正GZip文件,但将GZIP文件正文传递给dezipped.toString('utf-8')
会返回undefined
。
为什么?
答案 0 :(得分:3)
body
很可能是一个字符串,而zlib.gunzip()
期待一个流/缓冲区。
尝试将encoding: null
设为选项。
encoding - 要在响应数据的setEncoding上使用的编码。如果为null,则将主体作为缓冲区返回。
request.get(req.query.url, {encoding: null}, function(error, response, body) {
if (req.query.isGzip == 'true') {
zlib.gunzip(body, function(err, dezipped) {
var xmlData = dezipped.toString('utf-8');
parseAndOffload(xmlData, req, res);
});
} else {
parseAndOffload(body, req, res);
}
});