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

标签 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) {
    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{

    }
});

最佳答案

我在另一篇 SO 帖子中找到了解决方案,答案是一样的,但很难找到答案,因为我专门寻找在文件上传之前调用的东西。我现在使用的代码(您可以在 form.on('file'

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 然后他可以通过它。

关于javascript - 在上传整个文件之前验证文件扩展名 强大 (node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408134/

相关文章:

javascript - 我可以在装饰器方法中获取变量的名称吗?

javascript - node.js 而不是重定向显示警报消息

node.js - 使用强大的 Node 文件上传不起作用

javascript - 上传文件nodejs和Angular强大

javascript - 如何验证单选按钮?

javascript - 有没有办法在两个不同的页面之间制作动画滚动过渡?

javascript foreach 数组并用逗号和空格分隔并显示为字符串

java - 如何在不使用 CAST 函数的情况下在连接级别以正确的格式 (CCSID 37) 转换 IBM DB2 十六进制数据

node.js - Mongodb、mongoose——动态设置TTL时间

node.js - Node 强大,创建不必要的零字节大小的文件