проверить расширение файла для загрузки файла в Firefox - PullRequest
0 голосов
/ 21 ноября 2011

Я создал страницу загрузки, используя серверный элемент управления 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 ]

2 голосов
/ 22 ноября 2011

Рассмотрите возможность использования функции 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
}
2 голосов
/ 21 ноября 2011

Firefox предоставляет только информацию об имени файла, но не информацию о его пути.Ваше регулярное выражение анализирует информацию о пути, поэтому оно терпит неудачу.

Я считаю, что другие браузеры, отличные от IE, также отправляют только имя файла.Цель состоит в том, чтобы защитить конфиденциальность пользователя (то есть: вы можете получить его системное имя пользователя, если файл был сохранен в разделе Мои документы в Windows).

...