根据扩展名确定文件是图片还是视频不起作用

Determining if a file is a picture or video based on extension not working

我正在尝试确定上传的文件是视频还是照片。我需要这个,以便根据文件扩展名,我可以将视频或照片发送到我的电报机器人。

让我失望的是,我的逻辑似乎是正确的:

form.parse(req, (err, fields, files) => {
        if (err) {
            res.render('error')
        } else {
            console.log('File uploaded : ' + files.upload.path + '/' + files.upload.name);
            console.log('Fields : ' + fields);
            console.log(path.extname(files.upload.name))
            if(path.extname(files.upload.name).toLowerCase() === ".jpeg" || ".jpg" || ".png" || ".tiff" || ".gif") {
                console.log("image")
            }
            else if(path.extname(files.upload.name).toLowerCase() === ".mp4" || ".m4a"|| ".f4v" || ".m4b" || ".mov") {
                console.log("video")
            }
            else {
                render('error')
            }
            res.render('success')
        }
    });

上传 .mp4 视频文件时,它会打印它是 .mp4,但随后会打印图像。我不确定为什么会这样。非常感谢任何帮助。

您尝试使用的 or 比较并不像您认为的那样有效。只有你的第一个比较是使用 path.extname(files.upload.name).toLowerCase() 的值,其他人正在评估字符串的真实性并适当地返回。因此,第一个 if 总是会被输入。

例如

> x = 5
5
> if ( x == 4 || ".jpg" ) {console.log("Yep")};
Yep
> if ( x == 5 && "" ) {console.log("Yep")};
undefined
> if ( x == 5 && "yep" ) {console.log("Yep")};
Yep

你的代码有问题

form.parse(req, (err, fields, files) => {
    if (err) {
        res.render('error')
    } else {
        console.log('File uploaded : ' + files.upload.path + '/' + files.upload.name);
        console.log('Fields : ' + fields);
        console.log(path.extname(files.upload.name))
        let extension = path.extname(files.upload.name).toLowerCase();
        if(extension  === ".jpeg" || extension === ".jpg" || extension === ".png" || extension === ".tiff" || extension === ".gif") {
            console.log("image")
        }
        else if(extension  === ".mp4" || extension === ".m4a"|| extension === ".f4v" || extension  === ".m4b" || extension  === ".mov") {
            console.log("video")
        }
        else {
            render('error')
        }
        res.render('success')
    }
});