oak-general-business/es/utils/files/md5.web.js

30 lines
978 B
JavaScript

import SparkMd5 from 'spark-md5';
export function calculateFileMd5(file) {
return new Promise((resolve, reject) => {
const chunkSize = 2097152;
const chunks = Math.ceil(file.size / chunkSize);
let currentChunk = 0;
const spark = new SparkMd5.ArrayBuffer();
const fileReader = new FileReader();
fileReader.onload = function (e) {
spark.append(e.target?.result);
currentChunk++;
if (currentChunk < chunks) {
loadNext();
}
else {
resolve(spark.end());
}
};
fileReader.onerror = function () {
reject(new Error('Failed to read file'));
};
function loadNext() {
const start = currentChunk * chunkSize;
const end = Math.min(start + chunkSize, file.size);
fileReader.readAsArrayBuffer(file.slice(start, end));
}
loadNext();
});
}