Обеспечить Javascript алгоритм для S3 ETag - PullRequest
0 голосов
/ 07 января 2020

Мне нужно проверить целостность файла до и после загрузки файла в / из корзины 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();  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...