上传前检查文件大小(Check file size before upload)

2019-06-17 11:35发布

我使用这个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>

此检查文件大小,并提交表单之前提醒用户。

Answer 1:

客户端上传取消

在现代浏览器(FF> = 3.6,Chrome浏览器> = 19.0,戏曲> = 12.0,马车上Safari浏览器),你可以使用HTML5文件API 。 当一个文件输入的值发生变化,这个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)验证篡改。

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
    }
}


Answer 2:

我创建PhpMyCoder的答案的一个jQuery版本:

$('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();
}


Answer 3:

JavaScript的浏览器中运行一般没有访问本地文件系统。 这是在沙箱外。 因此,我认为答案是否定的。



文章来源: Check file size before upload