Допустим необходимо ограничить размер загружаемого файла на сервер в обычной веб форме. Это не сложно сделать на стороне сервера 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 из-за ужесточения политики безопасности и по сему требует от пользователя изменения настроек браузера.
Frameworks.su Шпаргалка вебмастера