我使用的是busboy插件来处理文件上传,大致机理如下: 插件注册了一个file事件的处理程序,file事件是当文件上传完时会触发的事件。 可是当我只发出上传请求,而文件实际是undefined的时候,就一直不会触发事件,很长时间后处理才会结束。 如果连续5次发出这样的请求,Node进程就会卡住,需要几分钟才恢复过来。 后端怎样才能在这种情况下流畅运行? 不要说别发送undefined,万一别人就是这样攻击你的服务器呢? 所以我要区别出这种情况并做相应措施。 下面贴代码 req.pipe(req.busboy); console.log(req.busboy); req.busboy.on('file’,cont); cont是对应处理的函数
7 回复
基于官方的例子:
var http = require('http'),
path = require('path'),
fs = require('fs'),
os = require('os');
var Busboy = require('busboy');
http.createServer(function(req, res) {
if (req.method === 'POST') {
//在这里做一个头部数据检查
if(!/multipart\/form-data/i.test(req.headers['content-type'])){
return res.end('wrong');
}
var busboy = new Busboy({ headers: req.headers });
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log('file')
var saveTo = path.join(os.tmpDir(), path.basename(fieldname));
file.pipe(fs.createWriteStream(saveTo));
});
busboy.on('finish', function() {
res.writeHead(200, { 'Connection': 'close' });
res.end("That's all folks!");
});
return req.pipe(busboy);
}
res.writeHead(404);
res.end();
}).listen(8000, function() {
console.log('Listening for requests');
});