依赖于spark-md5.min.js
<html>
<head>
<script type="text/javascript" src="spark-md5.min.js" ></script>
</head>
<body>
<input type="file" id="file" />
<div id="box"></div>
<button id="cal" type="button" onclick="calculate()">计算md5</button>
</body>
<script>
console.log(FileReader,window.FileReader );
function calculate(){
var fileReader = new FileReader(),
box=document.getElementById('box');
blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice,
file = document.getElementById("file").files[0],
chunkSize = 2097152,
// read in chunks of 2MB
chunks = Math.ceil(file.size / chunkSize),
currentChunk = 0,
spark = new SparkMD5();
console.time('time');
fileReader.onload = function(e) {
console.log("read chunk nr", currentChunk + 1, "of", chunks);
spark.appendBinary(e.target.result); // append binary string
var _chunks_per = Math.floor(chunks / 50);
_chunks_per = _chunks_per || 1;
currentChunk += _chunks_per;
if (currentChunk < chunks) {
loadNext();
}
else {
console.timeEnd('time');
console.log("finished loading");
//setTimeout(function() {console.info("computed hash", spark.end());}, 60); // compute hash
box.innerText='MD5 hash:'+spark.end();
/*console.info("computed hash", spark.end()); // compute hash
console.info("computed hash", spark.end()); // compute hash
console.info("computed hash", spark.end()); // compute hash*/
}
};
function loadNext() {
console.count('times:');
var start = currentChunk * chunkSize,
end = start + chunkSize >= file.size ? file.size : start + chunkSize;
fileReader.readAsBinaryString(blobSlice.call(file, start, end));
};
loadNext();
}
</script>
</html>