我正在尝试将以下 curl 转换为节点请求。
curl -F files[][email protected] 'https://www.rebasedata.com/api/v1/convert?outputFormat=mysql&errorResponse=zip' -o output.zip
我尝试使用 request 或 node-libcurl 但找不到上传 mdb 文件的方法。
我的代码是
var request = require('request');
var options = {
url: 'https://www.rebasedata.com/api/v1/convert?outputFormat=mysql&errorResponse=zip',
method: 'POST',
formData: {
custom_file: {
options: {
contentType: 'application/mdb'
},
value: path.resolve(__dirname, 'myMdb.mdb')
}
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
但是我不断收到错误,例如没有给出文件或无法打开文件。
任何帮助表示赞赏。
你有一些错误:
key
的curl
说法是files[]
,不是custom_file
,这只是一个例子request
这里文档https://github.com/request/request#multipartform-data-multipart-form-uploads。所以请把它改成files[]
request
还说值应该是 a stream
,而不是路径path
并fs
创建流和读取路径文件编辑:如何从响应中编写 zip 文件?
你想写zip文件,请参考包JSZip
https://stuk.github.io/jszip/documentation/howto/read_zip.html。have 之后body
,读取 zip 并写入 zip 文件。
我已经用新代码解决了您的问题,回调处理程序来自 文档request
,您可以忽略我的回调处理程序。
更新的 zip 文件
之前请安装包 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 } } }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句