js檢核檔案大小、檔案類型

by cactus77kiki

HTML

<div>
    <!--<label for="profile_pic"></label>-->
    <input type="file" id="profile_pic" name="profile_pic"
          accept=".jpg, .jpeg, .png, .xlsx" onchange="checkfile(this);">
    <br/>              
  </div>
  <br/>
  <div>
    
  </div>
  
  <script>  
  //檔案類型檢核
  function checkfile(sender) {
  //檔案大小
  var sizeresult = checksize(sender,Filesize["3kb"]);  
  	
  // 可接受的附檔名
  var validExts = new Array(".xlsx", ".xls", ".csv");

  var fileExt = sender.value;
  fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
  if (validExts.indexOf(fileExt) < 0) {
    alert(sizeresult+"\r\n"+"檔案類型錯誤,可接受的副檔名:" + validExts.toString()+"!");
    sender.value = null;
    return false;
  }
  else return true;
}

//檔案大小檢核
var Filesize = {
	"3kb": 307200,	//0.3mb
  "5mb": 5242880	//5mb
};

function checksize(sender,param){
	if(param){
  	var filesize = sender.files[0].size;
    if(filesize>param){
    	var paramkey = "";
    	Object.getOwnPropertyNames(Filesize).forEach(
  function (val, idx, array) {    
	if(Filesize[val] == param)
		paramkey=val;
  }
);    
  		return "檔案大小超過"+paramkey+"!";
    }    
  }else{
  	//未輸入條件,不檢核檔案大小
  	return "";
  }

}
</script>

JavaScript

/*
html限制上傳檔案類型
ref:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file

js檢核上傳檔案類型
ref:https://blog.gtwang.org/web-development/html-input-accept-attribute-tutorial/

js檢核檔案大小
ref:https://jsfiddle.net/hibbard_eu/7bjfr/

js object由value取得key資料
ref:https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

js
*/

/*
以下是其他找到的檔案上傳方式(json-base64,formdata)
ref1:https://pjchender.blogspot.com/2019/01/js-javascript-input-file-upload-file.html
ref2:https://social.msdn.microsoft.com/Forums/vstudio/en-US/0afa9ce2-be08-42e4-8c27-900a2b813552/how-to-post-file-in-json?forum=csharpgeneral
*/