从Nodejs提供二进制/缓冲区/Base64数据

3

我遇到了从Node读取二进制数据的问题。我正在使用名为node-speak的Node模块,它可以将文本转换为语音(TTS),并返回Base64编码的音频文件。

到目前为止,我正在采用以下方式将base64转换为Buffer / 二进制并进行服务:

// 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>");

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

3

有两个错误。

  1. 不是 Conetnt-Length,而是 Content-Length
  2. res.end(binAudio, "binary"); 是错误的。使用 res.end(binAudio);。使用 "binary" 时,它期望一个字符串 - binary 在 Node 中是个废弃的字符串编码,如果你已经有缓冲区,请不要使用任何编码。

谢谢您注意到这个错别字,当我将代码粘贴到SO时应该看到它。还有感谢您的回答。我仍然遇到问题,但至少现在它正在提供一个有效的audio/x-wav文件。 - Christopher
谢谢您的帮助,如果您有时间,能否看一下这个问题:http://stackoverflow.com/q/8354936/371040 - Christopher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接