首先是JS 批量上傳
HTML
<div id="Pic_pass"> <p style="font-size: 20px;font-weight: bold;">請上傳照片 </p> <p><span style="color: red">注:最多可以傳3張</span></p> <div class="picDiv"> <div class="addImages"> <input type="file" class="file" id="fileInput" multiple="" accept="image/png, image/jpeg, image/gif, image/jpg"> <div class="text-detail"> <span>+</span> <p>點擊上傳</p> </div> </div> </div> </div>
樣式
.imageDiv { display:inline-block; width:160px; height:130px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; border:1px dashed darkgray; background:#f8f8f8; position:relative; overflow:hidden; margin:10px } .cover { position:absolute; z-index:1; top:0; left:0; width:160px; height:130px; background-color:rgba(0,0,0,.3); display:none; line-height:125px; text-align:center; cursor:pointer; } .cover .delbtn { color:red; font-size:20px; } .imageDiv:hover .cover { display:block; } .addImages { display:inline-block; width:160px; height:130px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; border:1px dashed darkgray; background:#f8f8f8; position:relative; overflow:hidden; margin:10px; } .text-detail { margin-top:40px; text-align:center; } .text-detail span { font-size:40px; } .file { position:absolute; top:0; left:0; width:160px; height:130px; opacity:0; }
JS代碼
var userAgent = navigator.userAgent; //用於判斷瀏覽器類型 $(".file").change(function () { //獲取選擇圖片的對象 var cou = $('.imageDiv').length console.log(cou) var docObj = $(this)[0]; var picDiv = $(this).parents(".picDiv"); var fileList = docObj.files; console.log(fileList) console.log(fileList.length) console.log(picDiv) //循環遍歷 for (var i = 0; i < fileList.length; i++) { //動態添加html元素 var picHtml = "<div class='imageDiv' > <img id='img" + fileList[i].name + "' /> <div class='cover'><i class='delbtn'>刪除</i></div></div>"; picDiv.prepend(picHtml); //獲取圖片imgi的對象 var imgObjPreview = document.getElementById("img" + fileList[i].name); if (fileList && fileList[i]) { formData.append("file", docObj.files[i]); //圖片屬性 imgObjPreview.style.display = 'block'; imgObjPreview.style.width = '160px'; imgObjPreview.style.height = '130px'; //imgObjPreview.src = docObj.files[0].getAsDataURL(); //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要以下方式 if (userAgent.indexOf('MSIE') == -1) { //IE以外瀏覽器 imgObjPreview.src = window.URL.createObjectURL(docObj.files[i]); //獲取上傳圖片文件的物理路徑; console.log(docObj.files[i]); // var msgHtml = '<input type="file" id="fileInput" multiple/>'; } else { //IE瀏覽器 if (docObj.value.indexOf(",") != -1) { var srcArr = docObj.value.split(","); imgObjPreview.src = srcArr[i]; console.log(srcArr[i]); } else { imgObjPreview.src = docObj.value; } } } } $('#fliei1').click(function () { console.log($(".file").files) }) /*刪除功能*/ $(".delbtn").click(function () { var _this = $(this); _this.parents(".imageDiv").remove(); }); }); })
效果
但是圖片都是沒有壓縮的 、
本來JS 是沒有辦法壓縮的 但是H5的畫布可以 可以用畫布壓縮
function dealImage(path, obj) { var img = new Image(); img.src = path; img.onload = function () { var that = this; var w = that.width, h = that.height, scale = w / h; w = obj.width || w; h = obj.height || (w / scale); var quality = 0.85; //壓縮質量 1是不壓縮 var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); var anw = document.createAttribute("width"); anw.nodeValue = w; var anh = document.createAttribute("height"); anh.nodeValue = h; canvas.setAttributeNode(anw); canvas.setAttributeNode(anh); ctx.drawImage(that, 0, 0, w, h); if (obj.quality && obj.quality <= 1 && obj.quality > 0) { quality = obj.quality; } var base64 = canvas.toDataURL('image/jpeg', quality); //最后返回壓縮后的base64編碼 console.log(base64) } }
var imgReaderI = new FileReader();
//轉換base64編碼 imgReaderI.readAsDataURL(docObj.files[i]); console.log(imgReaderI) var size=docObj.files[i].size imgReaderI.onloadend = function (evt) { //壓縮 dealImage(this.result, { width: 180 }); } }
有一點 docObj.files[i] 這個表示選擇的圖片可以傳到后台直接保存 但是沒有壓縮。
1個1.9M 壓縮過后28.2K 還是特別客觀的 接下來 我們就可以吧這個字符串通過AJAX方式傳入后台。進行保存或者直接放入數據庫,下一篇 我會寫后台保存方法MVC 保存到服務器 返回相對路徑