kav@94 Ответов: 2

Как проверить все файлы в нескольких загрузчиках файлов с помощью ASP .NET C#


In my application i have a file uploader which accept multiple files in a single fileupload control i need to validate the extensions of all the files in that file uploader in such a way that it should accept only doc and docx suppose if i select 5 fils in a file uploader all the files should be of -b.doc,-b.docx,-b.DOC and -b.DOCX if there are any other extensions other than these four i should show an error message and clear the files which are in that particular file uploader how can i do this below is my file uploader code.


<asp:FileUpload ID="filDoc" runat="server" multiple="multiple"/>


Что я уже пробовал:

i tried the below code the problem is it is showing alert instead it should show error message after displaying the error message it should cleat the files in file uploader but it is showing two files 

<asp:FileUpload ID="filDoc" runat="server" multiple="multiple" onchange ="checkFileExtension(this);"/>

<script type="text/javascript">
        function checkFileExtension(elem) {
            var filePath = elem.value;
            if (filePath.indexOf('.') == -1)
                return false;
 
            var validExtensions = new Array();
            var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
            //Add valid extentions in this array
            validExtensions[0] = 'doc';
            //validExtensions[1] = 'pdf';
 
            for (var i = 0; i < validExtensions.length; i++) {
                if (ext == validExtensions[i])
                    return true;
            }
            alert('The file extension ' + ext.toUpperCase() + ' is not allowed!');
            return false;
        }
    </script>

2 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Ваш код будет работать только для одного файла и никогда для нескольких файлов...
На самом деле ASP.NET FileUpload-это старый школьный элемент управления, в основном серверная база, поэтому у вас нет реальной функциональности на стороне клиента...
У вас есть два варианта:
1. Место в современном клиентской базе - контроль загрузки
2. Используйте серверные возможности FileUpload для проверки и возврата сообщения об ошибке клиенту


Рейтинг:
2

Richard Deeming

Вам нужно повторить все сначала то files коллекция[^], в браузерах, которые его поддерживают. (Браузеры, которые его не поддерживают[^] также не поддерживает множественный выбор файлов.)

function checkSingleFileExtension(fileName, validExtensions) {
    var index = fileName.lastIndexOf('.');
    if (index == -1) {
        alert('All files must have an extension.');
        return false;
    }
    
    var ext = fileName.substr(index + 1).toLowerCase();
    for (var index = 0; index < validExtensions.length; index++) {
        if (ext === validExtensions[index]) {
            return true;
        }
    }
    
    alert('The file extension ' + ext.toUpperCase() + ' is not allowed.');
    return false;
}

function checkFileExtension(elem) {
    var validExtensions = ['doc', 'pdf'];
    
    if (elem.files) {
        for (var index = 0; index < elem.files.length; index++) {
            var file = elem.files[index];
            if (!checkSingleFileExtension(file.name, validExtensions)){
                return false;
            }
        }
    }
    else {
        if (!checkSingleFileExtension(elem.value, validExtensions)){
            return false;
        }
    }
    
    return true;
}

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

< input type= "file"> - HTML | MDN :: ограничение допустимых типов файлов[^]

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