spark-md5
import SparkMD5 from "spark-md5";
const chunkSize = 8388608;
export function md5(file, progress) {
let blobSlice =
File.prototype.slice ||
File.prototype.mozSlice ||
File.prototype.webkitSlice;
let totalChunk = Math.ceil(file.size / chunkSize.value);
let currentChunk = 0;
let spark = new SparkMD5.ArrayBuffer();
let fileReader = new FileReader();
fileReader.onload = (e) => {
spark.append(e.target.result);
currentChunk++;
if (progress) {
let progressValue = currentChunk / totalChunk;
let progressPercentValue = parseFloat((progressValue * 100).toFixed(2));
progress(progressPercentValue);
}
if (currentChunk < totalChunk) {
loadNext();
} else {
return Promise.resolve(spark.end());
}
};
fileReader.onerror = () => {
return Promise.reject();
};
function loadNext() {
let beginIndex = currentChunk * chunkSize.value;
let endIndex = beginIndex + chunkSize.value;
if (endIndex >= file.size) {
endIndex = file.size;
}
fileReader.readAsArrayBuffer(blobSlice.call(file, beginIndex, endIndex));
}
loadNext();
}