2011-11-30 63 views
3

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

到目前为止,我这样做是为了从base64转换缓冲器/二进制文件,然后为它服务:

// 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文件。

:基于64位的数据是有效的,我可以成为它像这样[见下文],它工作正常:

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

那么,为什么我不能服务于二进制文件,我在做什么错?

回答

2

有两件事是错误的。

  1. 没有Conetnt-Length,这是Content-Length
  2. res.end(binAudio, "binary");是错误的。使用res.end(binAudio);。与"binary",它期望一个字符串 - binary是在节点中不推荐使用的字符串编码,如果您已经有一个缓冲区,则不使用编码。
+0

感谢您注意到输入错误,我应该看到,当将代码粘贴到SO中时。并感谢您的答案。 我仍然有问题,但在弹性它现在提供有效的'音频/ x-wav'文件。 – Christopher

+0

感谢您的帮助,如果您有时间可以查看以下问题:http://stackoverflow.com/q/8354936/371040 – Christopher