通過FileReader實現多張圖片轉換成base64、上傳、預覽、刪除


 

 

方法名 參數 描述
abort none 中斷讀取
readAsBinaryString file(blob) 將文件讀取爲二進制碼
readAsDataURL file(blob) 將文件讀取爲 DataURL
readAsText file, (blob) 將文件讀取爲文本
事件 描述
onabort 中斷時觸發
onerror 出錯時觸發
onload 文件讀取成功完成時觸發
onloadend 讀取完成觸發,無論成功或失敗
onloadstart 讀取開始時觸發
onprogress 讀取中
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>fileReader</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <style lang="">
        .upload {
            width: 200px;
            height: 50px;
            line-height: 50px;
            text-align: center;
            position: relative;
            background-color: orange;
        }
        
        .file {
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
        }
        
        .outbox {
            position: relative;
            display: inline-block;
        }
        
        .outbox img {
            width: 200px;
            height: 200px;
        }
        
        .delete {
            position: absolute;
            width: 20px;
            height: 20px;
            top: 0;
            right: 0;
            background: url(https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1381865013,3042801585&fm=27&gp=0.jpg) center no-repeat;
            background-size: 100% 100%;
        }
    </style>
</head>

<body>
    <div class="upload">上傳
        <input type="file" accept="image/*" multiple class="file" id="imgfile">
    </div>
    <div id="previewImg"></div>
    <button id="btn">提交</button>
    <script>
        var input = document.getElementById("imgfile");
        var preview = document.getElementById("previewImg");
        var urlArr = [];
        //檢測瀏覽器是否支持FileReader  
        if (typeof(FileReader) === 'undefined') {
            result.innerHTML = "抱歉,你的瀏覽器不支持 FileReader,請使用現代瀏覽器操作!";
            input.setAttribute('disabled', 'disabled');
        } else {
            //開啓監聽  
            input.addEventListener('change', readFile, false);
        }

        function readFile() {
            var files = this.files;
            for (var i = 0; i < files.length; i++) {
                //限定上傳文件的類型,判斷是否是圖片類型   
                (function() {
                    var temp = i;
                    if (!/image\/\w+/.test(files[i].type)) {
                        return false;
                    }
                    var reader = new FileReader();
                    reader.readAsDataURL(files[i]);
                    reader.onload = function(e) {
                        compress(this.result, temp);
                    };
                })()
            }

        }

        function compress(res, index) {
            var img = new Image();
            var maxHeight = 300; //用來設置壓縮比例
            img.onload = function() { //要先確保圖片完整獲取到,這是個異步事件
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                if (img.height > maxHeight) {
                    img.width *= maxHeight / img.height;
                    img.height = maxHeight;
                }
                canvas.height = img.height;
                canvas.width = img.width;
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.drawImage(img, 0, 0, canvas.width, canvas.height); //將圖片繪製到canvas中
                var dataUrl = canvas.toDataURL('image/jpg', 1); //轉換圖片爲dataURL(圖片格式,圖片質量)
                var div = document.createElement('div');
                var span = document.createElement('span');
                div.setAttribute('class', 'outbox');
                span.setAttribute('class', 'delete');
                span.setAttribute('data-value', index++);
                var img1 = document.createElement('img');
                img1.src = dataUrl; //把得到的base64賦值到img標籤顯示
                div.appendChild(img1);
                div.appendChild(span);
                preview.appendChild(div);
                urlArr.push(dataUrl);
            }
            img.src = res;
        }
        //刪除圖片操作  
        $('#previewImg').on('click', 'span', function() {
            urlArr.splice($(this).attr('data-value'), 1);
            var html = '';
            for (var j = 0; j < urlArr.length; j++) {
                html += "<div class = 'outbox'><img src=" + urlArr[j] + "><span class='delete' data-value=" + j +
                    "></span></div>";
            }
            $('#previewImg').html(html);
        })
        $('#btn').click(function() {
            console.log(urlArr);
        })
    </script>
</body>

</html>

 

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