Мне нужно проверить целостность файла до и после загрузки файла в / из корзины S3. Поэтому для этого я использую пакет ts-md5 в angular для загрузки. Ha sh, генерируемый ts-md5, совпадает с ETag в файле корзины S3, когда я загружаю файл изображения или файлы размером менее 2 МБ. но когда я загружаю файлы размером 10 МБ и 20 МБ, в этом случае ha sh, сгенерированный ts-md5, не совпадает с ETag в файле S3 bucket. Пожалуйста, дайте мне знать javascript алгоритм для генерации md5 ha sh на стороне клиента, который совпадает с S3 Etag. Каков будет размер чанка в случае многочастной загрузки.
Ниже приведен мой код, пожалуйста, дайте мне знать, какие изменения необходимо внести:
uploadFile (e: any) {debugger;
var blobSlice = File.prototype.slice;
var file = e.target.files[0];
var chunkSize = 16777216//5242880//2097152; // read in chunks of 2MB
var chunks = Math.ceil(file.size / chunkSize);
var currentChunk = 0;
var spark = new SparkMD5.ArrayBuffer();
var self = this;
var frOnload = function (e) {
console.log("\nread chunk number " + (currentChunk + 1) + " of " + chunks);
spark.append(e.target.result); // append array buffer
currentChunk++;
var cd = spark.end();
console.log('CD: ' + cd);
self.chunkArray.push(cd);
if (currentChunk < chunks) {
loadNext();
}
else {
console.log(self.chunkArray);
var cspark = new SparkMD5();
var chunkmd5append = "";
for (var i = 0; i < self.chunkArray.length; i++) {
chunkmd5append += self.chunkArray[i];
}
cspark.append(chunkmd5append);
var finalHash = cspark.end();
console.log("final hash: " + finalHash);
}
};
var frOnerror = function () {
console.log("\noops, something went wrong.");
};
var loadNext = function () {
var fileReader = new FileReader();
fileReader.onload = frOnload;
fileReader.onerror = frOnerror;
var start = currentChunk * chunkSize,
end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
};
loadNext(); }