用于检查文件扩展名的javascript问题

时间:2015-03-16 06:51:59

标签: javascript

我已经编写了用于检查文件扩展名的javascript

 function Validate() {
    try {
        var Name = document.getElementById('<%=fiFile.ClientID %>').value;
        if (Name == "") {
            return false;
        }
        else {
            var index = Name.lastIndexOf('\\') + 1;
            var FileName = Name.substring(index, Name.length);


            var ext = extension(FileName)

            switch (ext) {
                case 'jpg':
                case 'gif':
                case 'png':
                case 'bmp':
                case 'pdf':
                case 'txt':
                case 'doc':
                case 'docx':
                case 'xls':
                case 'xlsx':
                case 'xlr':
                case 'mdf':
                case 'ppt':
                case 'pptx':
                case 'msg':
                case 'log':
                case 'bak':
                case 'xml':
                case 'html':
                case 'mp3':
                case 'm4a':
                case 'm3u':
                case 'mid':
                case 'wma':
                case 'wav':
                case 'mp4':
                case 'mpg':
                case 'm4v':
                case 'vob':
                case 'mnv':
                case 'rm':
                case 'mov':
                case 'flv':
                case 'wmv':
                        return true;
                    break;
                default:
                    alert('Select a proper file');
                    return false;
            }
        }
    }
    catch (err) {
        alert(FileName);
    }
}

function extension(fname) {
    try {
        var pos = fname.lastIndexOf(".");
        var strlen = fname.length;
        if (pos != -1 && strlen != pos + 1) {
            var ext = fname.split(".");
            var len = ext.length;
            var extension = ext[len - 1].toLowerCase();
        } else {
            extension = "No extension found";
        }
    }
    catch (errr)
    { }
    return extension;
}

当我上传其他文件(如.exe)时,页面仍会刷新并保存文件。我希望当用户上传带有其他扩展名的文件时,页面不应刷新,不应保存文件。请帮帮我!!!

3 个答案:

答案 0 :(得分:2)

为什么不使用HTML5方式进行文件选择?

<input type="file" accept="image/*, video/*, audio/* application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint">

您可以随意添加我错过的MIME类型或根据您的意愿调整,但此文件会限制文件类型以支持,因此您不必对其进行明确检查。

答案 1 :(得分:1)

使用jQuery库(jquery.validate.min.jsadditional-methods.js)的解决方案:

$("#vform").validate({
    rules: {
        fileName: {
            extension: "jpg|gif|png|bmp|pdf|txt|doc|docx|xls|xlsx|xlr|mdf|ppt|pptx|msg|log|bak|xml|html|mp3|m4a|m3u|mid|wma|wav|mp4|mpg|m4v|vob|mnv|rm|mov|flv|wmv"
        }
    },
    messages: {
        fileName: "You may not upload this type of file."
    }
});

Demo fiddle

答案 2 :(得分:0)

您可以对文件输入字段使用accept属性,如下所示,

<form action="demo_form.asp">
<input type="file" name="pic" accept="image/*">
<input type="submit">
</form>

语法:
<input accept="file_extension|audio/*|video/*|image/*|media_type">

file_extension--以STOP字符开头的文件扩展名,例如:.gif,.jpg,.png,.doc
audio / * - 接受所有声音文件
视频/ * - 接受所有视频文件
image / * - 接受所有图像文件 media_type - 有效的媒体类型,没有参数。 Look at IANA Media Types获取标准媒体类型的完整列表

否则你可以像下面一样手动检查,

<form action="demo_form.asp" onsubmit='return validate()' method="post">
<input type="file" name="pic">
<input type="submit">
</form>


如果你的验证函数将True作为return返回,则只有表单才会提交,否则什么都不做。