30 lines
978 B
JavaScript
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();
|
|
});
|
|
}
|