Я использую этот javascript, который я получил отсюда, и он отлично работает для того, что мне нужно.
var _validFileExtensions = [".jpg", ".jpeg"]; function File_Validator(theForm){ var arrInputs = theForm.getElementsByTagName("input"); for (var i = 0; i < arrInputs.length; i++) { var oInput = arrInputs[i]; if (oInput.type == "file") { var sFileName = oInput.value; var blnValid = false; for (var j = 0; j < _validFileExtensions.length; j++) { var sCurExtension = _validFileExtensions[j]; if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) { blnValid = true; break; } } if (!blnValid) { alert("Invalid image file type!"); return false; } } } return true; }
Теперь мне было интересно, может ли, кроме того, проверить размер файла и сбой, если файл больше 500kb -> все, прежде чем нажимать кнопку отправки / отправки?
РЕДАКТИРОВАТЬ
После изучения того, что предложил PHPMyCoder, я в конечном итоге решаю, используя этот код javascript:
<script language='JavaScript'> function checkFileSize(inputFile) { var max = 3 * 512 * 512; // 786MB if (inputFile.files && inputFile.files[0].size > max) { alert("File too large."); // Do your thing to handle the error. inputFile.value = null; // Clear the field. } } </script>
Это проверяет размер файла и предупреждает пользователя перед отправкой формы.
В современных браузерах (FF> = 3.6, Chrome> = 19.0, Opera> = 12.0 и ошибках в Safari) вы можете использовать API файлов HTML5 . Когда значение входного файла изменяется, этот API позволит вам проверить, соответствует ли размер файла вашим требованиям. Конечно, это, как и MAX_FILE_SIZE
, может быть изменено, поэтому всегда используйте проверку на стороне сервера.
<form method="post" enctype="multipart/form-data" action="upload.php"> <input type="file" name="file" id="file" /> <input type="submit" name="submit" value="Submit" /> </form> <script> document.forms[0].addEventListener('submit', function( evt ) { var file = document.getElementById('file').files[0]; if(file && file.size < 10485760) { // 10 MB (this size is in bytes) //Submit form } else { //Prevent default and display error evt.preventDefault(); } }, false); </script>
На стороне сервера невозможно остановить загрузку из PHP, поскольку после того, как PHP был вызван, загрузка уже завершена. Если вы пытаетесь сохранить пропускную способность, вы можете запретить загрузку со стороны сервера с настройкой ini upload_max_filesize
. Проблема с этим заключается в том, что это относится ко всем загрузкам, поэтому вам придется выбирать что-то либеральное, которое работает для всех ваших загрузок. Использование MAX_FILE_SIZE
обсуждалось в других ответах. Я предлагаю прочитать руководство по нему . Знайте, что это, как и любая другая клиентская сторона (включая проверку javascript), могут быть изменены, поэтому вы должны всегда иметь проверку на стороне сервера (PHP).
На стороне сервера вы должны проверить, что файл находится в пределах ограничений по размеру (потому что все до этой точки, за исключением установки INI, можно подделать). Вы можете использовать массив $_FILES
чтобы узнать размер загрузки. (Документы о содержимом $_FILES
можно найти ниже документов MAX_FILE_SIZE
)
upload.php
<?php if(isset($_FILES['file']) { if($_FILES['file']['size'] > 10485760) { //10 MB (size is also in bytes) // File too big } else { // File within size restrictions } }
Я создал jQuery версию ответа PhpMyCoder:
$('form').submit(function( e ) { if(!($('#file')[0].files[0].size < 10485760 && get_extension($('#file').val()) == 'jpg')) { // 10 MB (this size is in bytes) //Prevent default and display error alert("File is wrong type or over 10Mb in size!"); e.preventDefault(); } }); function get_extension(filename) { return filename.split('.').pop().toLowerCase(); }
JavaScript, работающий в браузере, обычно не имеет доступа к локальной файловой системе. Это вне песочницы. Поэтому я думаю, что ответ отрицательный.