Обслуживание двоичных / буферных / base64 данных из Nodejs - PullRequest
3 голосов
/ 30 ноября 2011

У меня проблемы с обслуживанием двоичных данных с узла. Я работал над модулем узла под названием node-говорящий , который выполняет TTS (преобразование текста в речь) и возвращает аудиофайл в кодировке 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.

Примечание : данные Base64 действительны, я могу обработать их следующим образом [см. Ниже], и они отлично работают:

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

Так почему я не могу обслуживать двоичный файл, что я делаю не так?

1 Ответ

2 голосов
/ 30 ноября 2011

Две вещи не так.

  1. не Conetnt-Length, это Content-Length
  2. res.end(binAudio, "binary"); неверно. Используйте res.end(binAudio);. С "binary" он ожидает строку - binary является устаревшей кодировкой строки в узле, не используйте кодировку, если у вас уже есть буфер.
...