最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

快递限制请求大小

IT培训 admin 6浏览 0评论

快递限制请求大小

在以下情况下(简化),我想限制上传的请求大小:

app = Express();
router = Express.Router();
router.use('/upload', (req, res, next) => {
  const writeStream = fs.createWriteStream('filename');
  req.pipe(writeStream);
});
app.use(router);

如您所见,没有使用任何形式或类似形式(无法更改此形式)。因此,该数据作为原始数据流提供。

由于在这种情况下我找不到任何现有的模块(body-parser在这种情况下不起作用,raw-body也不能使用,因为应保持流不变),我目前的方法是使用以下方法代码作为快递的中间件:

function(req, res, next) {
  if (req.headers['content-length'] > limit) {
    res.set("Connection", "close");
    res.status(413).end();
    return;
  }
  let received = 0;
  req.on('data', (chunk) => {
    received += chunk.length;
    if (received > limit) {
      res.set("Connection", "close");
      res.status(413).end();
    }
  })
  next();
})

还有其他更好的方法吗?有没有现成的npm软件包可以做到这一点?

回答如下:

最后,我使用@ambianBeing提供的答案解决了它,并重写了后来处理缓冲区而不是流的函数。

快递限制请求大小

在以下情况下(简化),我想限制上传的请求大小:

app = Express();
router = Express.Router();
router.use('/upload', (req, res, next) => {
  const writeStream = fs.createWriteStream('filename');
  req.pipe(writeStream);
});
app.use(router);

如您所见,没有使用任何形式或类似形式(无法更改此形式)。因此,该数据作为原始数据流提供。

由于在这种情况下我找不到任何现有的模块(body-parser在这种情况下不起作用,raw-body也不能使用,因为应保持流不变),我目前的方法是使用以下方法代码作为快递的中间件:

function(req, res, next) {
  if (req.headers['content-length'] > limit) {
    res.set("Connection", "close");
    res.status(413).end();
    return;
  }
  let received = 0;
  req.on('data', (chunk) => {
    received += chunk.length;
    if (received > limit) {
      res.set("Connection", "close");
      res.status(413).end();
    }
  })
  next();
})

还有其他更好的方法吗?有没有现成的npm软件包可以做到这一点?

回答如下:

最后,我使用@ambianBeing提供的答案解决了它,并重写了后来处理缓冲区而不是流的函数。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论