我需要在我的 Nodejs 应用程序中下载并解压 zip 存档。我有这个代码:
utils.apiRequest(teamcityOptions)
.then(function (loadedData) {
var tempDir = tmp.dirSync();
var tmpZipFileName = tempDir.name + "\\" + 'bob.zip';
fs.appendFileSync(tmpZipFileName, loadedData);
var zip;
try {
zip = new AdmZip(tmpZipFileName);
} catch (e) {
log('Can not create zip, bad data', e);
}
});
这段代码给我错误:
无法创建 zip,数据错误 无效的 CEN 标头(签名错误)
我使用的是 Windows 7。我什至无法使用 7-zip 或 WinRAR 打开此 ZIP 文件(简单错误,例如数据损坏)。
Also, utils.apiRequest
函数体是:
utils.apiRequest: function (options) {
var deferred = defer();
https.get(options, function (request) {
var loadedData = '';
request.on('data', function (dataBlock) {
loadedData += dataBlock.toString('utf8');
});
request.on('end', function () {
deferred.resolve(loadedData);
})
});
return deferred.promise;
}
我该如何解决我的问题?
PS:我使用没有问题curl
:)
问题是您正在将接收到的数据解码为 utf8 字符串:
request.on('data', function (dataBlock) {
loadedData += dataBlock.toString('utf8'); // this is wrong
});
由于 zip 文件是二进制文件,因此您应该使用缓冲区。
这是您的替换示例utils.apiRequest
带缓冲区:
utils.apiRequest: function (options) {
var deferred = defer();
https.get(options, function (request) {
var data = [];
request.on('data', function (dataBlock) {
data.push(dataBlock);
});
request.on('end', function () {
deferred.resolve(Buffer.concat(data));
});
});
return deferred.promise;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)