Я пытаюсь написать функцию Express для потоковой передачи файла, который должен работать с CATT. Глядя на внутренний веб-сервер CATT, я вижу следующий файл: https://raw.githubusercontent.com/skorokithakis/catt/3e9dc9b8845823a21dc03e38e5481a84079d68a5/catt/http_server.py
Я написал это (я думаю, правильно) в Node, но кажется, что протокол приведения висит вокруг. после того, как потоковая передача привела меня к мысли, что с потоком что-то не так
Кто-нибудь может проверить приведенный ниже код, чтобы подтвердить, что он работает так же, как и в приведенном выше файле, и потоковая передача правильная?
router.get('/sounds/*', async(req, res) => {
const file = path.resolve(__dirname, `../bin/sounds/${req.params[0]}`);
fs.stat(file, (err, stats) => {
if(err) {
if(err.code === 'ENOENT') return res.sendStatus(404);
res.end(err)
}
const total = stats.size;
let last = total -1;
let start = 0;
let responseType = 200;
const chunksize = last - start + 1;
const headers = {
"Accept-Ranges": "bytes",
"Content-Length": chunksize,
"Content-Type": "audio/mp3",
"Access-Control-Allow-Origin": "*",
"Last-Modified": new Date()
};
if(!req.headers.range) {
start = 0;
last = total;
} else {
const range = parseRange(10, req.headers.range, { combine: true });
first = range[0].start;
last = range[0].end;
}
if(last === 0 || last >= total) {
last = total - 1;
}
if(!req.headers.range) responseType = 200;
else {
responseType = 206;
headers["Content-Range"] = "bytes " + first + "-" + last + "/" + total
}
console.log(headers)
res.writeHead(responseType, headers);
fs.createReadStream(file, {autoClose: true}).pipe(res);
})
});