在上传整个文件之前validation文件扩展名(node.js)

我有一个Node.JS服务器作为一个路由器工作,它可以发送请求,以上传文件,只有jpg / png / jpeg扩展应该被允许我现在做的是:

var form = new formidable.IncomingForm(), files = [], postToFolder, source, size = 0, dest; postToFolder = '/path/'; form.on('file', function (field, file) { var fileType = file.type.split('/').pop(); if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') { // alot of stuff } else{ console.log('invalid filetype'); fs.unlinkSync(file.path); console.log('Deleted: ' + file.path); } 

这段代码可以正常工作,但是它会将file upload到/ tmp /文件夹,然后必须删除它们,如果它们是无效的。 如果我可以在文件完全上传之前检查文件扩展名,性能会更好。 有谁知道如何? 我已经试过google没有运气,并遇到一些不适用于Formidable的答案。

编辑:

所以我发现它在启动之前触发了RIGHT,但是它确实开始写文件,取消它或者在导致整个文件磁盘写满的时候中断服务器,文档非常糟糕,所以我无法find任何将允许我“跳过”文件

 form.on('fileBegin', function(field, file) { var fileType = file.type.split('/').pop(); if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') { } else{ } }); 

我已经find了解决scheme在其他SOpost,这是相同的答案,但答案很难find,因为我正在寻找特定的东西之前,上传文件。 我现在使用的代码(你可以删除form.on('文件'

 form.onPart = function (part) { if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) { this.handlePart(part); } else { console.log(part.filename + ' is not allowed'); } } 

使用express.js和节点上传文件,限制扩展

编辑:我也想指出,这不会禁止用户重命名.exe为.jpg,然后他可以通过。