проверить отправку файла? - PullRequest
0 голосов
/ 08 августа 2011

На моей странице есть несколько полей для загрузки файлов (все с name="files[]", поэтому они могут быть обработаны как массив PHP).

Все они расположены в одном из двух div, давайте назовем их'div1' и 'div2'.

Как я могу использовать javascript, чтобы onSubmit проверял типы файлов, и все файлы в div1 могут быть только pdf, а все файлы в div2 - толькобыть «PDF» или «документ»?

Подойдет простое всплывающее окно с предупреждением (т. Е. «Файлы могут быть только в формате pdf»)

Есть предложения?

**************** ОБНОВЛЕНИЕ *******************

Сделаноболее актуальный вопрос: Добавить проверку типа файла в phpmailer?

Ответы [ 4 ]

0 голосов
/ 08 августа 2011

Вы можете проверить при отправке для каждой загрузки файла, используя этот код:

var parts = document.getElementById('myFileField').value.split('.');
if (parts[parts.length-1] != 'pdf') {
    alert('Invalid extension. Needs to be PDF.');
}

Включая работу Маски,

var fileInputs = document.getElementsByName("files[]");
for (var ele in fileInputs) {
    if (ele.parentNode.id = 'div1') {
        var parts = ele.value.split('.');
        if (parts[parts.length-1] != 'pdf') {
            alert('Invalid extension: "' + ele.value + '". Needs to be PDF.');
        }
    }
    else if (ele.parentNode.id = 'div2') {
        var parts = ele.value.split('.');
        if (parts[parts.length-1] != 'pdf' && parts[parts.length-1] != 'doc') {
            alert('Invalid extension: "' + ele.value + '". Needs to be PDF or DOC.');
        }
    }
}
0 голосов
/ 08 августа 2011

Вы можете сделать это:

HTML:

<form method="post" enctype="multipart/form-data" name="form">

<input type="file" name="file" /><br />
<input type="file" name="file" />
<input type="submit" />
</form>

JavaScript:

   var fileInput = document.getElementsByName("file");
   for(var i = 0, len = fileInput.length; i < len; i++) {
    fileInput[i].addEventListener('change', 
        function(e) {
            if(this.files[0].name.match(/\.pdf$/) == null) {
                alert('Files can only be PDF.');
                return;
            }
        },
        false
    );
 }
0 голосов
/ 08 августа 2011

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

Но это можно использовать только для упрощения работы пользователя, поэтому вы можете обнаружить неправильные типы файлов перед загрузкой.

Это никак не защита.

Вы также можете передать ожидаемые типы файлов в само диалоговое окно. Большинство файловых менеджеров и браузеров уважают его и отображают только файлы того типа, который вы хотите выбрать, но пользователь может щелкнуть раскрывающийся список и выбрать «просмотреть все файлы» и выбрать любые файлы, которые он / она хочет.

Это делается с помощью атрибута accept .

Если вы хотите помочь пользователю выбрать правильный файл, оба метода выше подходят, и я бы даже использовал их вместе.

Если вы хотите защитить свой сервис от неправильных типов файлов, вам нужно оценить файловый сервер. Проверка расширения файла не подходит, существуют функции php , доступные для определения реального типа файла.

0 голосов
/ 08 августа 2011

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

Самый простой обходной путь - просто поставить небольшую заметку рядом с полями с надписью "Только PDF!" а затем используйте серверный скрипт, чтобы подтвердить, что это PDF-файл.

...