Javascript 在上载整个文件(node.js)之前验证文件扩展名

Javascript 在上载整个文件(node.js)之前验证文件扩展名,javascript,node.js,formidable,Javascript,Node.js,Formidable,我有一个Node.JS服务器作为路由器,可以向它发出post请求以上载文件,只允许使用jpg/png/jpeg扩展名。我目前正在做的是: var form = new formidable.IncomingForm(), files = [], postToFolder, source, size = 0, dest; postToFolder = '/path/'; form.on('file', function (field, file) {

我有一个Node.JS服务器作为路由器,可以向它发出post请求以上载文件,只允许使用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);
        }
这段代码可以工作,但它会将文件上载到/tmp/文件夹,如果文件无效,则必须将其删除。如果我能在文件完全上传之前检查文件扩展名,性能会更好。有人知道怎么做吗?我曾尝试过谷歌搜索,但运气不好,我发现了一些答案,但这些答案并不适用于“强大”搜索引擎

编辑:

所以我发现它在开始之前就触发了,但是它确实开始写入文件,在写入过程中取消文件或中断服务器导致我的整个文件磁盘被写满了几次,文档非常糟糕,所以我找不到任何允许我“跳过”文件的东西


我在另一篇SO帖子中找到了解决方案,答案是相同的,但很难找到答案,因为我在上传文件之前专门寻找了一个名为的东西。我现在使用的代码(您可以在表单.on('file'中删除文件类型检查)

来源


编辑:我还想指出,这并不禁止用户将.exe重命名为.jpg,然后他就可以完成它。

条件应该是:
(part.filename&&part.filename.match(…)
,否则它将不起作用(因为您允许处理未命名的文件)。
form.on('fileBegin', function(field, file) {
    var fileType = file.type.split('/').pop();

    if (fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg') {

    }
    else{

    }
});
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');
    }
}