我该如何发送' ogg'我的HTTP POST请求正文中的文件?

时间:2018-01-10 17:02:34

标签: node.js http post httprequest postman

我正在开发一个nodejs项目,该项目需要通过向API发出请求来获取响应,我需要在请求正文中发送音频文件(audio.ogg)。在' postman'我们可以通过从本地选择文件并发出请求来做这样的事情。

click this for POSTMAN request demo

如何使用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' });
});

1 个答案:

答案 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

的文档