【问题标题】:How to upload a blob with Multer?如何使用 Multer 上传 blob?
【发布时间】:2019-03-10 12:40:15
【问题描述】:

我一直在关注this video,以了解如何使用Multer 上传文件。

然后我在我的一个Node.js 应用程序中实现了图像上传功能。

现在我想使用Multer 上传包含音频数据的 blob 的内容。要走的路是什么?我已经尝试了一些我学到的东西,但是我已经遇到了一些问题:

  1. 我现在处理的是音频数据而不是图形数据。
  2. 我没有字段名称可以作为 multer({ storage: storage }).single(...); 函数调用的参数。

我希望有经验的人(使用Multer)对此提供一些指导。

作为参考,这是我点击上传按钮时的代码:

uploadVceRcd.onclick = e => {
    var reader = new FileReader();
    reader.onload = function(event) {
        var fd = {};
        fd["fname"] = "VoiceRecord_"+Date.now()+".opus";
        fd["data"] = event.target.result;
        $.ajax({
          type: 'POST',
          url: 'VoiceUpLoad',
          id: document.getElementById('sentID').innerText,
          data: fd,
          dataType: 'text'
        }).done(function(data) {
          console.log('uploadAudio - Done !');
          console.log(data);
        });
    };
    reader.readAsDataURL(blob);
}

这是我在 index.js 中处理匹配 VoiceUpLoad 路由的代码:

app.post('/VoiceUpLoad', function (req, res) {
  upload(req, res, function (err) {
    if (err) {
      if (err instanceof multer.MulterError) {
        // A Multer error occurred when uploading.
        console.log('A Multer error occurred when uploading. !!!');
      } else {
        // An unknown error occurred when uploading.
        console.log('A unknown error occurred when uploading. !!!');
        console.log(err);
      }
    } else {
      // Everything looks fine.
      console.log('All seems OOKK !!!');
      console.log(req.file);

      if (req.file == undefined) {
        console.log('req.file == undefined!!!');
      } else {
        console.log('SHOULD BE OOKK !!!');

        .......
      }
    }
  });
});

当我运行此代码时,我会在日志中看到以下内容:

... app[web.1]: All seems OOKK !!!
... app[web.1]: undefined
... app[web.1]: req.file == undefined!!!

【问题讨论】:

  • 你知道这个音频的编解码器吗?
  • 是OPUS,希望这是你想知道的答案。
  • 这是实时音频流还是您从文件阅读器或任何其他流阅读器获得的内容?
  • 这是我从本地麦克风那里得到的,录音结束了。
  • 您是否尝试过该解决方案,是否有效?

标签: node.js blob html5-audio multer


【解决方案1】:

您可以使用以下代码上传音频文件,

reader.onload = function(event) {
    var formData = new FormData();
    formData.append('fname', "VoiceRecord_"+ Date.now() + ".opus")
    formData.append('data', event.target.result)
    $.ajax({
        type: 'POST',
        url: 'some/path',
        data: formData,
        contentType: false,
        cache: false,
        processData: false,
    }).done(function(data) {
      console.log('uploadAudio - Done !');
      console.log(data);
    });
});

请尝试一下,如果可行,我会解释它。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2019-05-16
    • 2019-07-31
    • 2018-12-19
    • 2016-07-12
    • 2020-12-31
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多