在上传整个文件强大之前验证文件扩展名(node.js)

时间:2016-05-24 08:25:44

标签: javascript node.js formidable

我有一个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);
        }

此代码有效,但它将文件上传到/ tmp /文件夹,然后如果它们无效则必须删除它们。如果我可以在文件完全上传之前检查文件扩展名,那么性能会更好。谁会知道怎么样?我试过谷歌搜索没有运气,并遇到了一些不适用于Formidable的答案。

编辑:

所以我在启动之前就发现了这个触发器,但它确实开始写文件,取消它或破坏服务器,导致我的整个文件磁盘写满了几次,文档非常糟糕所以我不能找到任何可以让我“跳过”文件的东西

form.on('fileBegin', function(field, file) {
    var fileType = file.type.split('/').pop();

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

    }
    else{

    }
});

1 个答案:

答案 0 :(得分:2)

我在其他SO帖子中找到了解决方案,它的答案相同,但答案很难找到,因为我在上传文件之前专门查找调用的内容。我现在使用的代码(你可以删除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');
    }
}

来源uploading files using express.js and node, limiting extensions

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