JS计算文件的md5

首先需要引入js文件(二选一):

https://raw.github.com/satazor/SparkMD5/master/spark-md5.js

https://github.com/satazor/SparkMD5/blob/master/spark-md5.js

示例代码(需要更换spark-md5.js的路径):

<html>
<head>
<script type="text/javascript" src="spark-md5.js" ></script>
</head>

<body>
<input type="file" id="file" />
<div id="box"></div>
<button id="cal" type="button" onclick="calculate()">计算md5</button>
</body>

<script>

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();

    fileReader.onload = function(e) {
        console.log("read chunk nr", currentChunk + 1, "of", chunks);
        spark.appendBinary(e.target.result); // append binary string
        currentChunk++;

        if (currentChunk < chunks) {
            loadNext();
        }
        else {
            console.log("finished loading");
            box.innerText='MD5 hash:'+spark.end();
            console.info("computed hash", spark.end()); // compute hash
        }
    };

    function loadNext() {
        var start = currentChunk * chunkSize,
            end = start + chunkSize >= file.size ? file.size : start + chunkSize;

        fileReader.readAsBinaryString(blobSlice.call(file, start, end));
    };

    loadNext();
}

</script>
</html>