我正在开发一个nodejs项目,该项目需要通过向API发出请求来获取响应,我需要在请求正文中发送音频文件(audio.ogg)。在' postman'我们可以通过从本地选择文件并发出请求来做这样的事情。
如何使用npm软件包对我的Nodejs应用程序执行相同操作,例如' request'?
我的代码到目前为止引用了这里:
var request = require('request');
var fs = require('fs');
var path = require('path');
router.get('/', function(req, res, next) {
var options = {
method: 'post',
body: {
'language': "<language>",
'audio_file':path.join(__dirname, 'audio.ogg')
}, // Javascript object
json: true,
url: "<API>",
headers: {
'Authorization': "<token>",
'ContentType': "application/x-www-form-urlencoded"
}
}
request(options, function (err, res, body) {
if (err) {
console.log('Error :', err)
return
}
console.log(' Body :', body)
});
// res.render('index', { title: 'Express' });
});
答案 0 :(得分:1)
在options.headers
中,由于您要发送二进制数据,因此您的ContentType应为“multipart / form-data”而不是“application / x-www-form-urlencoded”,因为二进制数据被认为效率低下使用x-www-form-urlencoded
转移(有关原因的详细信息,请参阅this SO answer。)
幸运的是,您正在使用的request
库包含用于处理form-data
请求的multipart/form-data
库。 request
为此提供了formData
选项,您可以使用代替使用body
选项。
您更新的选项对象可能如下所示:
var formData = {
// Pass a simple key-value pair
language: '<language>',
// Pass data via Streams
my_file: fs.createReadStream(__dirname + '/audio.ogg')
};
var options = {
method: 'post',
formData: formData,
url: "<API>",
headers: {
'Authorization': "<token>",
'ContentType': "multipart/form-data"
}
}
有关详细信息,请查看request
here