Express Частичное содержимое - PullRequest
       2

Express Частичное содержимое

0 голосов
/ 11 февраля 2020

Я пытаюсь написать функцию 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);
  })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...