首页 > 解决方案 > 使用 spark md5 在本地计算 S3 ETag

问题描述

我已经将一个 14MB 的文件以块(5MB)的形式上传到 S3,并且还使用 spark-md5 计算了每个块的哈希值。每个块的单独哈希(由 spark-md5 生成)与上传到 S3 的每个块的 ETag 匹配。

但是完全上传到 S3 生成的 ETag 哈希与 spark-md5 生成的本地计算的哈希不匹配。以下是本地哈希的步骤:

  1. 生成每个块的哈希(由 spark-md5 生成)
  2. 加入每个块的哈希
  3. 转换为十六进制
  4. 计算哈希

下面是代码,请检查是否有错误。方法一:

        var mergeChunk = self.chunkArray.join('');
        console.log("mergeChunk: " + mergeChunk);

        var hexString = toHexString(mergeChunk);
        console.log("toHexString: " + hexString);

        var cspark1 = SparkMD5.hash(hexString);
        console.log("SparkMD5 final hash: " + cspark1);

方法二:

       var mergeChunk = self.chunkArray.join('');
       console.log("mergeChunk: " + mergeChunk);
       var cspark2 = SparkMD5.hash(mergeChunk);
       console.log("SparkMD5 final hash: " + cspark2);

请提供计算 ETag 的正确逻辑。

标签: javascriptamazon-s3md5angular8

解决方案


etags 是不透明的;AWS 不保证分段上传的标签是什么。

我认为这只是积木中的猫(按最终帖子中列出的顺序),但您不能依赖它。


推荐阅读