我使用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来说并不好。我该如何解决?
答案 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
}