Javascript文件类型检查器

时间:2018-11-03 11:10:10

标签: javascript html file-extension file-type

我有一个正在使用的文件扩展名检查器,但我无法弄清为什么它不起作用。我测试了显示布尔值const orderRanks = { unique: 2, rare: 4, legendary: 42, mythic: 420 }; const items = /*your items array*/; items.sort((lhsItem, rhsItem) => { const lhs = lhsItem.tier.toLowerCase(); const rhs = rhsItem.tier.toLowerCase(); return orderRanks[lhs] - orderRanks[rhs]; /* == -> 0 lhs < rhs -> negative lhs > rhs -> positive this works because it is simple numbers (not NaN nor limits) */ }); 来确定两个值是否相等。相反,它继续说我正在上传的文件不等于if语句中列出的文件类型,即使两个值完全相同。任何帮助将不胜感激

equal

索引如下

document.addEventListener('DOMContentLoaded', function() {
    document.querySelector('input[id="fileInput"]').onchange=validateSize;
})

function validateSize(event) {
    var filesLength = event.target.files.length;
    var filesSize = [];
    var result = "";
    var equal = null;
    document.getElementById("fileBigAlert").innerHTML = "";
    document.getElementById("fileExtAlert").innerHTML = "";

    if (filesLength >= 10) {
        document.getElementById("submitButton").disabled = true;
    } else {
        document.getElementById("submitButton").disabled = false;
    }

    for (i = 0; i < filesLength; i++) {

        if (event.target.files[i].size > 2097152) {
            document.getElementById("submitButton").disabled = true;
            document.getElementById("fileBigAlert").innerHTML = '<div class="alert alert-warning" role="alert">'
            + event.target.files[i].name + ' is larger than 2MB</div>';
        } else {
            filesSize.push(event.target.files[i].size);
        }

        if (String(event.target.files[i].type) !== "image/png" || "image/jpeg" || "image/gif") {
            equal = false;
            //document.getElementById("submitButton").disabled = true;
            //document.getElementById("fileExtAlert").innerHTML = '<div class="alert alert-warning" role="alert">'
            //    + event.target.files[i].name + ' Extension not allowed please choose a JPEG, JPG, GIF, or PNG file.</div>';
        } else {
            equal = true;
            //filesSize.push(event.target.files[i].size);
        }

    }

    console.log(event.target.files[0].type);
    console.log(equal);


    filesSize.forEach(function(item, index, array){ 
       result +=  index + ": " + item + "<br/>";
    });

    document.getElementById("fileValidate").innerHTML = result;
}

1 个答案:

答案 0 :(得分:0)

比较多个值的方式不正确。您有(string)!==(string)或(string)或(string),如果为true,则始终等于(string)!==(string)的布尔值;如果等于,则后面的(string)为(||)。但是,后面的字符串值"image/jpeg"将始终等于真正的布尔值。本质上,您仅匹配第一个条目("image/png")。如果文件不是png类型,则if语句将始终返回true,而equal将始终为false。

您如何比较:

var ftMustMatch = ["image/png", "image/jpeg", "image/gif"];

if( ftMustMatch.indexOf(String(event.target.files[i].type).toLowerCase()) < 0 ) {
    equal = false;
}

这可以理解为“如果文件的小写字符串值类型与数组的任何值都不匹配(结果将小于零),则将其设置为false。”

ftMustMatch表示文件类型必须匹配。

为什么toLowerCase?万一该值用不同的大小写形式输入,它仍将与您定义的值数组中的小写值匹配。