从服务二进制的NodeJS

从服务二进制的NodeJS

本文介绍了从服务二进制的NodeJS /缓冲/数据的base64的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在从节点提供的二进制数据的麻烦。我曾称为节点模块上的节点发言这确实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?

推荐答案

有两件事情是错误的。


  1. 不是 Conetnt长度,这是的Content-Length

  2. res.end(binAudio,二进制); 是错误的。使用 res.end(binAudio); 。随着二进制,它需要一个字符串 - 二进制为节点德precated字符串编码,使用没有编码,如果你已经有了一个缓冲。

  1. not Conetnt-Length, it's Content-Length
  2. res.end(binAudio, "binary"); is wrong. Use res.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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-30 16:43