【问题标题】:Serving binary/buffer/base64 data from Nodejs从 Nodejs 提供二进制/缓冲区/base64 数据
【发布时间】:2011-11-30 15:58:52
【问题描述】:

我在从节点提供二进制数据时遇到问题。我在一个名为 node-speak 的节点模块上工作,它执行 TTS(文本到语音)并返回一个 base64 编码的音频文件。

到目前为止,我这样做是为了将 base64 转换为 Buffer/binary,然后提供它:

// var src = Base64 data
var binAudio = new Buffer(src.replace("data:audio/x-wav;",""), 'base64');

现在我正在尝试从带有如下标题的节点提供此音频:

res.writeHead(200, {
  'Content-Type': 'audio/x-wav',
  'Content-Length': binAudio.length
});

并像这样服务它:

res.end(binAudio, "binary");

但它根本不起作用。是不是有什么我不太明白或者我做错了什么,因为这不是提供有效的audio/x-wav 文件。

注意:Base64 数据是有效的,我可以像这样提供它 [见下文],它工作正常:

// assume proper headers sent and "src" = base64 data
res.end("<!DOCTYPE html><html><body><audio src=\"" + src + "\"/></body></html>");

那么为什么我不能提供二进制文件,我做错了什么?

【问题讨论】:

    标签: audio node.js binary base64 buffer


    【解决方案1】:

    有两件事是错误的。

    1. 不是Conetnt-Length,是Content-Length
    2. res.end(binAudio, "binary"); 是错误的。使用res.end(binAudio);。对于 "binary",它需要一个字符串 - binary 是节点中不推荐使用的字符串编码,如果您已经有缓冲区,则不使用编码。

    【讨论】:

    • 感谢您注意到错字,我应该在将代码粘贴到 SO 时看到这一点。并感谢您的回答。我仍然遇到问题,但至少它现在提供有效的audio/x-wav 文件。
    • 感谢您的帮助,如果您有时间可以看看这个问题:stackoverflow.com/q/8354936/371040
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多