@pod_proteinom

Как прекратить запись в stream, если был достигнут определенный размер файла?

Всем доброе утро!=)
Пытаюсь разобраться со streamами в NodeJS, но к сожалению не все так просто как хотелось бы. Сперва код:
'use strict';

let url = require('url');
let fs = require('fs');
let path = require('path');

require('http').createServer(function(req, res) {

  let pathname = decodeURI(url.parse(req.url).pathname);

  switch(req.method) {
  case 'POST' :
    let fileName = path.basename(pathname);
    fs.access('./files/' + fileName, (err) => {
      if(err) {
        let fileSize = 0;
        let stream = fs.createWriteStream('./files/' + fileName);
          req.on('error', (err) => {
            console.log('err');
            res.statusCode = 500;
            res.end();
          });
          req.on('readable', () => {
            let chunk = req.read();
            if(chunk != null) {
              fileSize += chunk.length;
            
              if(fileSize > 1048576) {
                stream.end();
                res.statusCode = 413;
                res.end();
              }
              stream.write(chunk);
            }

          });
          req.on('end', () => {
            stream.end();
            res.statusCode = 200;
            res.end('Ok');
          });
      } else {
        res.statusCode = 409;
        res.end();
      }
    });
    break;
  default:
    res.statusCode = 502;
    res.end("Not implemented");
  }

}).listen(3000);

Если файл(request stream) превышает размер 1мб, то я пытаюсь закончить запись в stream(файл) и выдать 413 код ошибки. Но все падает, значит что то не так делаю.
Подскажите, что не так?)
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы