【问题标题】:how can I send an 'ogg' file in the body of my HTTP POST request?如何在 HTTP POST 请求的正文中发送“ogg”文件?
【发布时间】:2018-06-19 22:12:57
【问题描述】:

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

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

【问题讨论】:

    标签: node.js http post httprequest postman


    【解决方案1】:

    options.headers 中,由于您发送的是二进制数据,因此您的 ContentType 应该是“multipart/form-data”而不是“application/x-www-form-urlencoded”,因为二进制数据传输效率低下使用x-www-form-urlencoded(有关原因的详细信息,请参阅this SO answer)。

    幸运的是,您已经在使用的 request 库包括用于处理 multipart/form-data 请求的 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 的文档

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多