为什么我所有的文件上传都跳过 else if 条件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我所有的文件上传都跳过 else if 条件?相关的知识,希望对你有一定的参考价值。

我有一个检查文件类型的函数,这次我想检查文件是否正确,文件大小是否足够。 这次,我想检查文件是否正确,文件大小是否足够。 如果文件扩展名是正确的,但文件大小大于10MB,那么它应该抛出 "如果"。alert(); 里面 else if() 条件的块。 相反,它被跳过了。

我正在用37.3MB的.mov文件测试。

我做错了什么?

function fileValidationWinnerPhoto() {
    const realFileBtn = document.getElementById("real-file");
    let filePath = realFileBtn.value;
    let maxSize = 10485760;

    // Allowing file type
    let allowedExtensions = /(.jpg|.jpeg|.png|.bmp|.mov|.MOV)$/i;

    if (!allowedExtensions.exec(filePath)) {
        alert('Invalid file type');
        realFileBtn.value = '';
        return false;
    } else if(allowedExtensions.exec(filePath) && realFileBtn.files[0].size > maxSize) {
        alert("You have the correct file type but your uploaded file is too large!  Try uploading a file that's less than 10MB!");
        return false;
    } else {
        console.log("file accepted");
        fileAcceptedFlag = true;
    }
    return filePath;
}
答案

其实,它确实进入了 "else if "块,只是检查了 此处.确保你的环境支持 文件Api最简单的方法是检查全局对象是否存在FileReader。

if (window.FileReader) {
 console.log('File API works');
}
另一答案

file.value 出于安全考虑,通常是行不通的。使用新的 fileinput.files

要检查瓷砖类型。

let file = realFileBtn.files[0];
let type = file.type; //returns the MIME Type

//Method 1
if(/(.jpg|.jpeg|.png|.bmp|.mov|.MOV)$/i.test(file.type)) {
  //code here
}

//Method 2
let type2=file.type.split('/')[0];
if(type2=="video" || type2=="image") {
  //code here
}

要检查文件的大小。

if(file.size<maxSize) {
  //code here
}

在MDN上查看更多

以上是关于为什么我所有的文件上传都跳过 else if 条件?的主要内容,如果未能解决你的问题,请参考以下文章

if 块的第一个条件被跳过

Python:如果条件为真,则跳过 For 循环中的迭代

python 如何跳过异常继续执行

Python的 if .else.elif语句详解

9-分支选择

if 判断