jQuery限制上傳圖片格式和大小程式碼例項

螞蟻小編發表於2017-04-14

通常情況下網站對上傳的圖片格式和大小都會有所限制。

下面就分享一段能夠實現此功能程式碼,感興趣的朋友可以做一下參考。

程式碼中缺乏圖片,不過不影響核心功能。

特別說明:僅僅做前端驗證是不夠的,通常情況下,後臺也會進行同樣的驗證。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style>
.form-group {
  width: 100%;
  margin-bottom: 20px;
  height: auto;
}
.va-top {
  vertical-align: top;
  display: inline-block;
}
.input-w {
  width: 500px;
}
.img-left {
  padding-right: 16px;
  width: 65%;
  border-right: 1px dashed #cccccc;
}
.img-left a, .item_img {
  width: 120px;
  height: 120px;
  text-align: center;
  display: inline-block;
  margin-right: 50px;
  vertical-align: top;
}
.a_first + .item_img {
  margin-right: 0px;
}
.item_img img {
  width: 120px;
  height: 120px;
 }
.img-left .a_last, .img-left .a_first {
  padding-top: 85px;
  background-image: url("../img/addPic.png");
  background-repeat: no-repeat;
  background-position: center center;
}
.img-left .a_last {
  margin-right: 0;
}
.img-left .format-tip {
  margin-top: 20px;
}
.img-right {
  padding-left: 30px;
  width: 34%;
}
.img-right span {
  text-align: center;
}
input[type="file"] {
  display: none;
}
</style>
</head>
<body>
<div class="form-group file_group">
  <label class="va-top">照片</label>
  <div class="input-w va-top">
    <div class="img-left va-top">
      <a class="a_first" id="firstBtn">新增正面照片</a>
      <a class="a_last" id="lastBtn">新增反面照片</a>
      <p class="format-tip">請上傳身份證正面和反面照片,要求能看清證件號碼,格式要求:支援jpg/jepg/png,大小不超過4W</p>
    </div>
    <div class="img-right va-top">
      <p>參考示例</p>
      <img src="../img/img0.jpg" alt="照片的正反兩面">
    </div>
  </div>
  <input type="file" id="firstFile">
  <input type="file" id="lastFile">
  <span></span>
</div>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script>
(function($, win) {
  var imgBox = '<div class="item_img"><img src="ex.jpg"></div>';
  $(bind_img);
 
  function bind_img() {
    var firstBtn = document.getElementById("firstBtn");
    var lastBtn = document.getElementById("lastBtn");
    var fileFirst = document.getElementById("firstFile");
    var fileLast = document.getElementById("lastFile");
    bind_change(firstBtn, fileFirst);
    bind_change(lastBtn, fileLast);
  }
  //繫結圖片選擇的事件
  function bind_change(btnObj, fileObj) {
    $(btnObj).unbind("click").bind("click", function() {
      fileObj.click();
    });
    $(fileObj).change(function() {
      var that = $(this);
      //判斷圖片的型別和大小
      judgeTypeSize(btnObj, that, 160, img_upload);
 
    });
  }
 
  function judgeTypeSize(btnObj, fileObj, maxSize, callback) {
    var value = fileObj.val();
    if (!value.match(/.jpg|.jpeg|png/i)) {
      alert("圖片格式必須是jpg或jpeg或png");
    } else {
      var size = fileObj[0].files[0].size; //得到圖片的大小[]
      var span = fileObj.parent().find("span"); //錯誤的提示span
      console.log(size / 1024 + "kb");
      var trueSize = Math.ceil(size / 1024); //把位元組轉換成kb
      if (trueSize > maxSize) {
        span.show();
        span.html("照片尺寸過大,請重新選擇");
      } else {
        span.hide();
        if (callback) {
          callback(btnObj, fileObj[0]);
        }
      }
    }
  }
 
  function getImgUrl(fileObj) {
    var url;
    if (fileObj.files && fileObj.files[0]) { //火狐下
      url = window.URL.createObjectURL(fileObj.files[0]);
    } else { ////IE下
      fileObj.select();
      url = fileObj.selection.createRange().text;
      document.selection.empty();
    }
    return url;
  }
  //得到圖片的地址並進行預覽
  function img_upload(btnObj, fileObj) {
    var url = getImgUrl(fileObj);
    var $imgBox = $(imgBox);
    var imgLeft = $(".img-left");
    var img = $imgBox.find("img");
    img.attr("src", url);
    imgLeft[0].insertBefore($imgBox[0], btnObj); //js的方法
    //$(btnObj).hide();
    console.log("成功了");
  }
})(jQuery, window);
</script>
</body>
</html>

相關文章