Допустим необходимо ограничить размер загружаемого файла на сервер в обычной веб форме. Это не сложно сделать на стороне сервера php, perl, ruby даже apache имеет инструменты для решения данной задачи. Но вот незадача - что если нужно предотвратить отправку формы если размер файла слишком велик?
Раньше считалось что javascript с такой задачей справится не может - у него нет доступа к файловой системе, но на сегодняшний день браузеры предоставляют для поля ввода файла массив files. Его апи нескольго отличается в зависимости от браузера. А IE вообще не предоставляет такого функционала, но имеет альтернативное решение на основе ActiveX.
Следующая функция в комментариях не нуждается - она определяет размер файла и если он больше N Мб то возвращает false.
function validateSize(fileInput,size) { var fileObj, oSize; if ( typeof ActiveXObject == "function" ) { // IE fileObj = (new ActiveXObject("Scripting.FileSystemObject")).getFile(fileInput.value); }else { fileObj = fileInput.files[0]; } oSize = fileObj.size; // Size returned in bytes. if(oSize > size * 1024 * 1024){ return false } return true; }
И пример использование. В качестве параметра передаем ссылку на DOM елемент и размер в Мб
jQuery('#file_attachment').change(function () { if(!validateSize(this,10)){ alert("Размер файла превышает 10 MB"); } });
Кроме параметра size можно смело использовать name (имя файла), type (MIME тип).
Также стоит учесть что ActiveXObject не работает при стандартных настройках безопасности на Win7 из-за ужесточения политики безопасности и по сему требует от пользователя изменения настроек браузера.