Jquery 如何限制文件格式?

Jquery 如何限制文件格式?,jquery,Jquery,下面我有一个jquery代码,其中包括一个文本框,用户可以在其中选择文件: var $imagefile = $('<input />') .attr({ type: 'file', name: 'imageFile', id: 'imageFile' }); var$imagefile=$(“”) 艾特先生({ 键入:“文件”, 名称:'imageFile', id:'imageFile' }); 我的问题是,如何

下面我有一个jquery代码,其中包括一个文本框,用户可以在其中选择文件:

var $imagefile = $('<input />')
    .attr({
        type: 'file',
        name: 'imageFile',
        id: 'imageFile'
    });
var$imagefile=$(“”)
艾特先生({
键入:“文件”,
名称:'imageFile',
id:'imageFile'
});
我的问题是,如何获得它,从而限制用户选择jpeg、gif或png文件?我希望用户浏览一个文件,然后单击提交按钮。如果文件类型正确,则显示确认消息,否则显示警报,说明“为图像选择了错误的文件格式”

下面是validation(),其中显示警报:

function validation() {

    var marks = parseInt($("#total-weight").text());    
    var _qid = "";
    var _msg = "";

    var maxQuestions = <?php echo (int)@$_POST['textQuestion']; ?>;
    var questionsAdded = $('tr.optionAndAnswer').length;


    var alertValidation = "";
    // Note, this is just so it's declared...
    $("tr.optionAndAnswer").each(function() {


        _qid = $("td.qid",this).text();
        _msg = "You have errors on Question Number: " + _qid + "\n";

        $(".textAreaQuestion",this).each(function() {



            if (!this.value || this.value.length < 5) {
                alertValidation += "\n\u2022 You have not entered a valid Question\n";
            }

            if (alertValidation != "") {
                return false; //Stop the each loop 
            }
        });


        $(".txtWeightRow",this).each(function() {


            if (!this.value) {
                alertValidation += "\n\u2022 Please enter in a figure for Number of Marks for this Question\n";
            }

            if (alertValidation != "") {
                return false; //Stop the each loop 
            }
        });


        if(alertValidation != ""){
            return false;
        }
    });
函数验证(){
var marks=parseInt($(“#总重量”).text();
var_qid=“”;
var_msg=“”;
var maxQuestions=;
var questionsAdded=$('tr.optionandswer')。长度;
var alertValidation=“”;
//请注意,这只是它的声明。。。
$(“tr.optionandswer”)。每个(函数(){
_qid=$(“td.qid”,this.text();
_msg=“您在问题编号上有错误:”+\u qid+“\n”;
$(“.textAreaQuestion”,this).each(函数(){
如果(!this.value | | this.value.length<5){
alertValidation+=“\n\u2022您没有输入有效的问题\n”;
}
如果(alertValidation!=“”){
返回false;//停止每个循环
}
});
$(“.txtWeightRow”,this).each(函数(){
如果(!this.value){
alertValidation+=“\n\u2022请输入此问题的分数数字\n”;
}
如果(alertValidation!=“”){
返回false;//停止每个循环
}
});
如果(alertValidation!=“”){
返回false;
}
});

您需要将属性
accept=“image/*”
添加到您的
input
标记中,如下所示

var $imagefile = $('<input />')
    .attr({
        type: 'file',
        name: 'imageFile',
        id: 'imageFile',
        accept: 'image/*'
    });
var$imagefile=$(“”)
艾特先生({
键入:“文件”,
名称:'imageFile',
id:'imageFile',
接受:'image/*'
});
您应该在服务器端再次检查是否上载了正确类型的内容。不要只信任客户端验证

更多信息

自从1995年推出以来,
早就有了一个
accept
属性,在这里你可以列出你想要接受的MIME类型,例如
accept=“image/*”
。不过,直到最近浏览器才开始支持它。现在,Opera 11、Chrome 16、Firefox 9都没有

无法回忆使用
accept
是否确实过滤了“文件选择”对话框中列出的文件,或者仅在用户选择后限制接受的文件。可能因浏览器和操作系统而异

但是可以,您可以在选择文件后检查文件扩展名。例如(未测试):

var allowedTypes=[“jpg”、“jpeg”、“gif”、“png”];
var path=$imagefile.val();
var ext=path.substring(path.lastIndexOf('.')+1.toLowerCase();
如果($.inArray(ext,allowedTypes)<0){
alertValidation+='\n\u2022不支持的文件类型';
}

在任何情况下,您都希望验证服务器上的文件类型,而不是依赖客户端来确保它们是正确的类型。

将所选文件名与正则表达式模式匹配,如(+++.jpg$\.+\.png$.+\.gif$.+\.jpg$)如果匹配,请通知usr重新选择您不应该在创建元素后更改元素的
类型
属性,即会给您带来问题。我也接受:
iamge/png | | | iamge/jpg | | iamge/gif
?为什么它前面需要“image”这个词?是否有办法在服务器端检查它,以便在我单击提交按钮时检查它在服务器端进行检查,如果提交很好,否则会显示警报?如果您希望它限制为这三种图像类型,可以-除了它是
image/jpeg
,而不是
image/jpg
。它使用的方案是一个MIME类型列表-正如您可能从
text/html
text/javascript
text/css
中知道的那样。我会做出决定这里有一个罕见的例外,请参考维基百科。我在W3schools中找到了一个例子并制作了这个应用程序,你能帮我做这个吗?有没有办法在页面上显示警报,但仍然进行服务器端检查,而不是进入显示flle服务器端详细信息的新页面?有没有办法检查服务器端,以便当我点击提交按钮时,它会在服务器端进行检查,如果提交很好,否则会显示警报?您必须将文件上载到服务器,以便服务器进行检查,然后如果发布了无效的文件类型,则让服务器发回错误消息。客户端验证只是为了方便用户(不会让他不得不上传服务器永远不会接受的文件),但恶意用户可以轻易地欺骗任何客户端检查。我在W3schools中找到了一个示例,并制作了该应用程序,你能帮我做到这一点吗,有没有一种方法可以让它在页面上显示警报,但仍然执行服务器端检查,而不是进入显示flle服务器端详细信息的新页面?请参阅编辑后的答案。只有一个示例,prob到目前为止,Bly并没有完全遵循您的代码。
var allowedTypes = ["jpg", "jpeg", "gif", "png"];

var path = $imagefile.val();
var ext = path.substring(path.lastIndexOf('.') + 1).toLowerCase();

if ($.inArray(ext, allowedTypes) < 0) {
   alertValidation += '\n\u2022 Unsupported file type';
}