js實現上傳圖片類型+大小+尺寸驗證

Note:

1、每一個驗證可以單獨拆開去。只需要花費一點點功夫處理傳參,返回

2、verificationPicType類型驗證函數 和 verificationPicSpace大小驗證函數是實時的。直接可以用函數的返回值做判斷,處理之後業務邏輯。

3、但是verificationPicSize尺寸驗證函數的返回不能直接用。因爲內部圖片加載是異步的,函數的返回值不是基於圖片尺寸大小判斷的結果。只能利用錯誤提示。根本原因是內部使用FileReader對象。

FileReader 對象允許Web應用程序異步讀取存儲在用戶計算機上的文件(或原始數據緩衝區)的內容,使用 File 或 Blob 對象指定要讀取的文件或數據。

參考連接:FileReader

好了,直接上代碼

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
</head>
<body>
<input type="file" name="files" id="file" onchange="verifyImageInfo(this,['jpg','png'],100,{'width':1280,'height':710})">

</body>
<script type="text/javascript">
//圖片驗證(大小,尺寸,類型)
function verifyImageInfo(that,allow_type_arr,allow_space,allow_size_obj){
    if(verificationPicType(that,allow_type_arr)
        && verificationPicSpace(that,allow_space)){
        //尺寸驗證不能在判斷條件。
        //因爲內部圖片加載是異步的,函數的返回值不是基於圖片尺寸大小判斷的結果。只能利用錯誤提示
        verificationPicSize(that,allow_size_obj);
        return true;
    }
    return false;
}
/**
* 圖片類型驗證
* @allow_type_arr ['jpg','png'],如果數組爲空則表示不限
*/
function verificationPicType(that,allow_type_arr) {

    if(allow_type_arr.length==0) return true;

    var fileTypes = allow_type_arr;
    var filePath  = that.value;
    //當括號裏面的值爲0、空字符、false 、null 、undefined的時候就相當於false
    if(filePath){
        var isNext = false;
        var fileEnd = filePath.substring(filePath.indexOf(".")+1).toLowerCase();
        // console.log(fileEnd);
        for (var i = 0; i < fileTypes.length; i++) {
            if (fileTypes[i] == fileEnd) {
                isNext = true;
                break;
            }
        }
        if (!isNext){
            alert('不接受此文件類型');
            that.value = "";
            return false;
        }
        return true;
    }else {
        return false;
    }
}
/**
* 圖片大小驗證
* @allow_space 400,如果值爲0則表示不限
*/
function verificationPicSpace(that,allow_space) {
    
    if(allow_space==0) return true;

    var fileSize = 0;
    var fileMaxSize = allow_space;
    var filePath = that.value;
    if(filePath){
        fileSize =that.files[0].size;
        var size = fileSize / 1024;//單位b轉換kb
        // console.log(size);
        if (size > fileMaxSize) {
            alert("文件大小超出限制!");
            that.value = "";
            return false;
        }else if (size <= 0) {
            alert("文件大小不能爲0!");
            that.value = "";
            return false;
        }
        return true;
    }else{
        return false;
    }
}
/**
* 圖片尺寸驗證
* @allow_size_obj {'width':123,"height":345},如果值爲0則表示不限
*/
function verificationPicSize(that,allow_size_obj) {
    var filePath = that.value;
    if(filePath){
      //讀取圖片數據
        var filePic = that.files[0];
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            //加載圖片獲取圖片真實寬度和高度
            var image = new Image();
            image.onload=function(){
                var width = image.width;
                var height = image.height;
                if(width!=allow_size_obj['width'] && allow_size_obj['width']!=0){
                    alert("文件寬度"+width+"不符合要求");
                    that.value = "";
                    return false;                    
                }
                if(height!=allow_size_obj['height'] && allow_size_obj['height']!=0){
                    alert("文件高度"+height+"不符合要求");
                    that.value = "";
                    return false;                                                
                }
                return true;
            };
            image.src= data;
        };
        reader.readAsDataURL(filePic);   
    }else{
        return false;
    }
}
</script>
</html>

吃水不忘挖井人

js圖片類型+大小+尺寸驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章