最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin12浏览0评论

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

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

我正在开发一个nodejs项目,需要通过向API发出请求来获取响应,我需要在请求体中发送音频文件(audio.ogg)。在“邮差”中,我们可以通过从本地选择文件并发出请求来执行此类操作。

如何使用像'request'这样的npm包对我的Nodejs应用程序做同样的事情?

到目前为止我的代码在这里引用:

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' });
});
回答如下:

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的文档

发布评论

评论列表(0)

  1. 暂无评论