验证文件扩展名以在firefox中上传文件

时间:2011-11-21 09:13:40

标签: asp.net regex vb.net validation file-upload

我使用FileUpload服务器控件创建了上传页面。我使用正则表达式验证器来验证文件扩展名。

<asp:FileUpload ID="AttachmentUpload" CssClass="text" size="58" Width="376px" IE:Width="385px" runat="server"/>
                    <asp:RequiredFieldValidator SetFocusOnError="true"
                                                ID="AttachmentUploadRequire"
                                                runat="server"
                                                ControlToValidate="AttachmentUpload"
                                                Display="None"
                                                ErrorMessage="Please select a file to attach."/>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator1"
                                                    runat="server"
                                                    ErrorMessage="The selected file type is not allowed!"
                                                    ControlToValidate="AttachmentUpload"
                                                    Display="None"
                                                    ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(\.[mM][pP]3|\.[mM][pP][eE][gG]|\.[sS][wW][fF]|\.[dD][oO][cC]|\.[tT][xX][tT]|\.[jJ][pP][gG]|\.[jJ][pP][eE][gG]|\.[pP][nN][gG]|\.[xX][lL][sS]|\.[pP][dD][fF]|\.[gG][iI][fF]|\.[pP][pP][tT])$"/>

对于chrome和IE来说没关系,但对于firefox来说并不好。我该如何解决?

2 个答案:

答案 0 :(得分:2)

Firefox仅提供文件名信息,而不提供其路径信息。正则表达式解析路径信息,因此失败。

我相信其他非IE浏览器也只发送文件名。目的是保护用户的隐私(即:如果文件存储在Windows下的“我的文档”下,您可以获取系统用户名。)

答案 1 :(得分:2)

考虑使用Javascript函数,在表单按钮的OnClientClick事件上调用它。此方法适用于所有浏览器:

function checkFileExtension() {
    var filePath = document.getElementById('AttachmentUpload').value;

    var validExtension = 'xml';
    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
    if (ext.toLowerCase() == validExtension)
        return true; //xml file is valid

    alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
    return false; //all other types of files are not valid
}