BinaryData Buffer как собрать в одно целое?
connection.on('message', (message)=>{
// console.log(message);
if (message.type === 'binary'){
// console.log(message.binaryData)
// binaryAudio = Buffer.concat(binaryAudio, message.binaryData)
// binaryAudio = binaryAudio .concat(binaryAudio, message.binaryData)
// binaryAudio.push(message.binaryData)
//binaryAudio += message.binaryData.toString()
// binaryAudio.append(message.binaryData.toString())
}
if (message.type === 'utf8' && JSON.parse(message.utf8Data).streamcontrol){
// console.log(binaryAudio.length)
// binaryAudio = [];
// res.end('');
res.statusCode = 200;
res.setHeader('content-type', 'audio/opus');
res.setHeader('Content-Disposition', 'attachment; filename=file.ogg');
res.setHeader("Content-Length", binaryAudio.toString().length);
// res.end(binaryAudio);
// res.end(binaryAudio.toString());
}
})
В общем выше код это все мои попытки собрать воедино. Но это все не увенчалось успехом. Файл не открывается как нужно.
В чем суть имеется глобальная переменная binaryAudio И когда в сокетах приходит тип binary нужно складывать данные в эту переменную.
В конце когда он отправит все бинарники он пришлет json в котором есть свойство streamcontrol и только в этом случае нужно сохранять полученные данные в один файл.
Проблема именно в правильной сборке файла. Т.к приведения к типу стринг и конкатинация не работает так просто.
Если сравнивать бинарник через текстовик они отличаются отступами и переносами строк. Они внешне не идентичны, начинаются одинаково, а далее не много другое расположение(визуально)
Как собрать правильно ?
Ответы (1 шт):
Нашел такое решение: Когда приходит бинарник делаем:
binaryAudio.push(message.binaryData)
когда нужно собирать делаем:
let result = Buffer.concat(binaryAudio)
И уже result отдаем на загрузку.