上传前检查文件大小
我正在使用这个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 – > all,然后按提交/上传button,我可以检查文件大小和失败吗?
编辑
看了PHPMyCoder的build议后,我最终解决了这个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上有bug),您可以使用HTML5文件API 。 当文件input的值改变时,这个API将允许你检查文件大小是否在你的要求范围内。 当然,这个以及MAX_FILE_SIZE
都可以被篡改,所以总是使用服务器端validation。
<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
来拒绝服务器端的上载。 这样做的麻烦是这适用于所有上传,所以你必须select自由的东西,适用于所有的上传。 其他答案已经讨论了MAX_FILE_SIZE
的使用。 我build议阅读它的手册 。 要知道,它和其他客户端(包括javascript检查)一起,可能会被篡改,所以你应该总是有服务器端(PHP)validation。
PHPvalidation
在服务器端,您应该validation该文件是否在大小限制内(因为除INI设置之外的所有内容都可能被篡改)。 您可以使用$_FILES
数组来找出上传大小。 (关于$_FILES
的内容的文档可以在MAX_FILE_SIZE
文档的下面find)
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 } }
我创build了一个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通常不能访问本地文件系统。 那在沙箱之外。 所以我认为答案是否定的。