У вас есть некоторые ошибки:
Отредактировано: Как записать zip-файл из resoponse?
Вы хотите написать zip-файл, пожалуйстасправочный пакет JSZip
https://stuk.github.io/jszip/documentation/howto/read_zip.html. После того, как у вас есть body
, прочитайте zip и запишите в zip файл.
Я решил вашу проблему с новым кодом, обработчик обратного вызова взят из документа request
, вы можете игнорировать мой обработчик обратного вызова.
Обновлен zip-файл
Перед установкой пакета jszip
npm install jszip --save
А это код, добавьте кодировка: ноль при запросе:
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 } } }