你有一些错误:
编辑:如何从响应中写入 zip 文件?
您要编写 zip 文件,请参考包JSZip
https://stuk.github.io/jszip/documentation/howto/read_zip.html。拥有后body
,读取 zip 并写入 zip 文件。
我已经用新代码解决了你的问题,回调处理程序来自文档request
,你可以忽略我的回调处理程序。
更新的压缩文件
在安装包之前jszip
npm install jszip --save
这是代码,请在请求时添加encoding: null :
var request = require('request');
var path = require('path');
var fs = require('fs');
var JSZip = require("jszip");
function callback(error, response, body) {
if (error || response.statusCode !== 200) {
console.log(error);
return;
}
JSZip.loadAsync(body).then(zip => {
console.log(zip.files);
zip.generateNodeStream({ type: 'nodebuffer', streamFiles: true })
.pipe(fs.createWriteStream(path.join(__dirname, './out.zip')))
.on('finish', function () {
console.log("File written");
});
}).catch(err => console.log(err))
}
request({
url: 'https://www.rebasedata.com/api/v1/convert?outputFormat=mysql&errorResponse=zip',
method: 'POST',
encoding: null, // <--------- important ----------
formData: {
'files[]': {
options: {
filename: 'database.mdb',
contentType: 'application/mdb'
},
value: fs.createReadStream(path.resolve(__dirname, './database.mdb'))
}
}
}, callback);
我的文件database.mdb
上传到这里https://ufile.io/prnsi(文件将在发布答案后 30 天后删除)。
什么时候console.log(zip.files);
,你会从我的数据库文件中收到
{ 'data.sql':
{ name: 'data.sql',
dir: false,
date: 2018-12-17T02:09:08.000Z,
comment: null,
unixPermissions: 33206,
dosPermissions: null,
_data:
{ compressedSize: 643,
uncompressedSize: 1817,
crc32: 1832401262,
compression: [Object],
compressedContent: <Buffer 9d 54 6d 6f a2 40 10 fe 7c fc 8a b9 4f da 56 da c5 7a 46 bd 98 88 b0 b6 44 5c ae 80 f7 d2 2f 88 b0 6d 49 10 1a 5e 9a f6 df df 02 be 80 40 7a 39 02 c9 ... > },
_dataBinary: true,
options: { compression: null, compressionOptions: null } } }