【问题标题】:How to send ArrayBuffer in json from js client to nodejs server?如何将json中的ArrayBuffer从js客户端发送到nodejs服务器?
【发布时间】:2018-01-21 02:48:39
【问题描述】:

我正在尝试使用 socket.io 将 json 中 ArrayBuffer 类型的数据发送到我的服务器,如下所示:

socket.emit('record', {
       name: myUsername + '.wav',
       data: data //arraybuffer
 });

在服务器端,当我在套接字中收到“记录”事件时,我会从 JSON 中获取 data 并将其保存在 name 文件中,如下所示:

socket.on('record', function(message){
      var fileWriter = new wav.FileWriter(message.name, {
        channels: 1,
        sampleRate: 48000,
        bitDepth: 16
        });
      message.data.pipe(fileWriter);
    });

我正在使用来自 npm 的 require('wav')require('stream') 包。问题是我的服务器在 message.data.pipe(fileWriter); 上崩溃并出现以下错误:

TypeError: message.data.pipe is not a function

我做错了什么?我不能在 socket.io 中发送这样的 ArrayBuffer 吗?

【问题讨论】:

  • 调用链接到流实例的.pipe(),而不是ArrayBuffer message.data

标签: javascript node.js socket.io


【解决方案1】:

dataArrayBuffer,而不是 ReadableStream。将data 排入队列以由ReadableStream 读取,传递给WritableStreamTransformStream,例如使用.pipeThrough(),请参阅Receiving data via stdin and storing as a variable/array

【讨论】:

  • 对不起,我没听懂。如何将我的 ArrayBuffer 转换为流实例?你能指出我的确切代码吗?另外,我应该在收到数据后在客户端还是服务器端进行转换?
  • 你不能。将数组缓冲区传递给流实例.pipe()方法
  • 我无法将数组缓冲区转换为流?
  • 没有。将数组缓冲区传递给可读、可写或转换流。您正在尝试读取或写入数组缓冲区的内容,是吗?
  • 没有尝试过nodejs流的实现。要点是将数据传递给流实例以进行读取、写入或两者兼而有之;您在其中定义要执行的读/写任务 - 而不是将数据本身转换为读取器或写入器。见streams.spec.whatwg.orggithub.com/substack/stream-handbook
猜你喜欢
  • 2020-02-28
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2015-08-02
  • 2022-01-12
  • 2013-11-16
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多