我正在尝试将我的nodejs服务器的请求发布到另一台服务器,然后我必须将响应保存在文件中。我正在使用nodejs https.request模块。
这是我的要求:
var formData = new FormData();
formData.append('first',3);
formData.append('second', '25');
formData.append('source_file', fs.createReadStream(sourcefile));
formData.append('source_image', fs.createReadStream(sourceimage));
var options = {
hostname: 'ip',
path: '/api/path',
method: 'POST'
}
var file = fs.createWriteStream("file.pdf");
var req = https.request(options, (response) => {
response.pipe(file);
console.log("File saved");
response.send("done")
});
req.on('error', (e) => {
console.error(e);
});
req.write(formData);
req.end();
但是我得到了错误
First argument must be a string or Buffer
我尝试使用formData.toString()
发送文件,但是使用此命令后,错误消失了,但是我的文件不起作用,并且我已经发送了如下数据:
var formData = new FormData();
formData = {
first: 3,
second: '25',
source_file: fs.createReadStream(sourcefile),
source_image: fs.createReadStream(sourceimage)
};
如何使用此请求将文件发送到其他服务器。
谢谢
答案 0 :(得分:1)
我假设您正在使用form-data。
要解决First argument must be a string or Buffer
错误,请替换:
req.write(formData);
req.end();
使用
formData.pipe(req);
({formData
的行为类似于Node.js ReadableStream
)
您还应该在请求中添加标头:
var options = {
hostname: 'ip',
path: '/api/path',
method: 'POST',
headers: formData.getHeaders()
}
来源:https://github.com/form-data/form-data#alternative-submission-methods
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用节点内置的body-parser
模块将表单数据解析为JSON和
你必须使用
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true }));
而当您执行req.body
时,它将把表单数据转换为对象表单。