gpt4 book ai didi

node.js - 由于无效的 CEN 错误,通过 nodejs 应用程序下载后无法打开 zip 文件

转载 作者:行者123 更新时间:2023-12-03 12:17:38 36 4
gpt4 key购买 nike

我需要在我的 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);
}
});

这段代码给我错误:

Can not create zip, bad data Invalid CEN header (bad signature)

我使用的是 Windows 7。我什至无法使用 7-zip 或 WinRAR 打开此 ZIP 文件(简单错误,例如数据损坏)。

此外,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 文件是二进制文件,因此您应该使用 Buffer。

这是一个用 Buffer 替换 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;
}

关于node.js - 由于无效的 CEN 错误,通过 nodejs 应用程序下载后无法打开 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466944/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com