javascript - 使用 spark md5 在本地计算 S3 ETag
问题描述
我已经将一个 14MB 的文件以块(5MB)的形式上传到 S3,并且还使用 spark-md5 计算了每个块的哈希值。每个块的单独哈希(由 spark-md5 生成)与上传到 S3 的每个块的 ETag 匹配。
但是完全上传到 S3 生成的 ETag 哈希与 spark-md5 生成的本地计算的哈希不匹配。以下是本地哈希的步骤:
- 生成每个块的哈希(由 spark-md5 生成)
- 加入每个块的哈希
- 转换为十六进制
- 计算哈希
下面是代码,请检查是否有错误。方法一:
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 的正确逻辑。
解决方案
etags 是不透明的;AWS 不保证分段上传的标签是什么。
我认为这只是积木中的猫(按最终帖子中列出的顺序),但您不能依赖它。
推荐阅读
- entity-framework - 在 Flutter 中从相机创建故事
- reactjs - React - 获取组件的第一个节点?
- spring-boot - 在 keycloak 中导出用户、角色和组
- javascript - Javascript / Node.js 导入 html 文件
- vue.js - 通过修改 vue.config.js 在 Vue.js MPA(多页应用程序)中提供自定义“找不到页面”404 页面?
- reactjs - Jest 测试在 Docker 中运行速度超慢
- php - 在 PHP 中使用带有 POST 数据的 jQuery 高级结构化过滤器插件
- laravel - 从已获取的集合中删除父级及其所有子级
- android - 浮动片段上的Android键盘导航
- flutter - 如何使用 Changenotifier 从 firestore 获取消息