js使用FileReader和Google的md5.js计算文件的MD5值

本文介绍了如何结合JavaScript的FileReader接口和Google的md5.js库,来计算上传文件的MD5校验值,这对于文件验证和重复检测非常有用。

js使用FileReader和Google的md5.js计算文件的MD5值

<body>
	<input id="input_md5" type="file" multiple="multiple"></input>
	
	<div class="progress progress-striped active progress-success">
          <div id="div_load" style="width: 40%" class="bar"></div>
    </div>
    
    <div id="md5_show"></div>
</body>

<script type="text/javascript">

	var message = [];
	
	if(!document.getElementById("input_md5").files){
		message = '<p>浏览器不支持FileReader API</p>';  
		document.querySelector("body").innerHTML = message;
	}else{
		document.getElementById('input_md5').addEventListener('change', handleFileSelection, false);
	}
	
	function handleFileSelection(event) {
		var files = event.target.files;
		if(!files){
			  msa.alert("<p>At least one selected file is invalid - do not select any folders.</p><p>Please reselect and try again.</p>");  
			  return;
		}
		
		var file = files[0];
		
		var chunkSize = 204800;
		var pos = 0;
		
		var md5Instance = CryptoJS.algo.MD5.create();
		
		var reader = new FileReader();
		function progressiveReadNext(){
			var end = Math.min(pos + chunkSize, file.size);

			reader.onload = function(e) {
				pos = end;
				md5Instance.update(CryptoJS.enc.Latin1.parse(e.target.result));
				var present = (parseFloat(pos)/parseFloat(file.size))*10000/100;
				$("#div_load").css("width",Math.round(present) +"%");
				if (pos < file.size) {
					progressiveReadNext();
				} else {
					var md5Value = md5Instance.finalize();
					console.log(md5Value.toString());
					$("#md5_show").html(md5Value.toString());
					
				}
			}

			if (file.slice) {
				var blob = file.slice(pos, end);
			} else if (file.webkitSlice) {
				var blob = file.webkitSlice(pos, end);
			}else if(File.prototype.mozSlice){
				var blob = file.mozSlice(pos, end);
			}
			reader.readAsBinaryString(blob);
		}
		progressiveReadNext();
	}
</script>



笔记

备忘录

代码块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值