问题描述
我在从节点提供的二进制数据的麻烦。我曾称为节点模块上的节点发言这确实TTS(文本到语音),并返回一个base64连接codeD音频文件。
I'm having trouble serving binary data from node. I worked on a node module called node-speak which does TTS (text to Speech) and return a base64 encoded audio file.
到目前为止,我这样做是从的base64
转换缓冲器/二进制文件,然后为它服务:
So far I'm doing this to convert from base64
to Buffer/binary and then serve it:
// var src = Base64 data
var binAudio = new Buffer(src.replace("data:audio/x-wav;",""), 'base64');
现在我想从一个节点服务于这个声音,象这样的标题:
Now I'm trying to serve this audio from node with the headers like so:
res.writeHead(200, {
'Content-Type': 'audio/x-wav',
'Content-Length': binAudio.length
});
和服务它,像这样:
res.end(binAudio, "binary");
但它不工作。有什么我havnt很明白还是我做错了什么,因为这不是服务于一个有效的音频/ X-WAV
文件。
的注意的:为Base64数据是有效的,我可以成为它像这样[见下文],它工作正常:
Note: The Base64 data is valid i can serve it like so [see below] and it works fine:
// assume proper headers sent and "src" = base64 data
res.end("<!DOCTYPE html><html><body><audio src=\"" + src + "\"/></body></html>");
那么,为什么我不能服务于二进制文件,我究竟做错了什么?
So why can I not serve the binary file, what am I doing wrong?
推荐答案
有两件事情是错误的。
- 不是
Conetnt长度
,这是的Content-Length
-
res.end(binAudio,二进制);
是错误的。使用res.end(binAudio);
。随着二进制
,它需要一个字符串 -二进制
为节点德precated字符串编码,使用没有编码,如果你已经有了一个缓冲。
- not
Conetnt-Length
, it'sContent-Length
res.end(binAudio, "binary");
is wrong. Useres.end(binAudio);
. With"binary"
, it expects a string -binary
is a deprecated string encoding in node, use no encoding if you already have a buffer.
这篇关于从服务二进制的NodeJS /缓冲/数据的base64的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!