javascript - 在上传到 AWS S3 时计算 Node.js 中本地文件的 ETag

标签 javascript node.js amazon-web-services amazon-s3

我目前正在尝试实现一个系统来验证我上传到 S3 的文件的完整性。通过适用于 JavaScript 的 AWS 开发工具包,我能够检索远程对象的 ETag,但是,我的本地对象的 MD5 哈希与 ETag 不匹配。我目前正在使用 crypto用于生成它,如下所示:

var hash = crypto.createHash('md5');
stream = fs.createReadStream(localfile);

stream.on('data', function (data) {
  hash.update(data, 'utf8')
})

stream.on('end', function () {
  md5 = hash.digest('hex');

  < rest of the code >
});

根据我在寻找答案时发现的所有结果,S3 对象的 ETag 应该是简单的 MD5 哈希:例如the AWS documentation (强调我的):

To ensure that data is not corrupted traversing the network, use the Content-MD5 header. When you use this header, Amazon S3 checks the object against the provided MD5 value and, if they do not match, returns an error. Additionally, you can calculate the MD5 while putting an object to Amazon S3 and compare the returned ETag to the calculated MD5 value.



但是,我的本地哈希与远程 ETag 不匹配。我在这里错过了什么吗?

谢谢你的时间!

澄清:我只上传小的纯文本文件,而不是处理多部分上传。我已经看到网络上的很多问题都与多部分上传有关,但这仅适用于简单的上传。谢谢!

最佳答案

键盘和椅子之间存在问题。问题在于实际文件上传,而不是 md5 总和。请参阅原始问题中的评论部分。

关于javascript - 在上传到 AWS S3 时计算 Node.js 中本地文件的 ETag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380600/

相关文章:

javascript - 如何在 JavaScript 中为 XML 创建有效的字符串?

java - 如何在Kotlin上创建AWS Lambda函数?

node.js - 在不知道索引的情况下使用 NodeJS 更新 MongoDB 中数组中的单个元素

c# - 在 .NET Core 中配置 AWS S3 客户端

JavaScript REGEX 模式匹配

javascript - "Content-disposition"- 类似 Javascript 的行为

amazon-web-services - Amazon lambda nodejs elasticache 在 redis 中存储数据

amazon-web-services - RDS 吃掉所有交换空间

javascript - JQUERY 对对象数组进行排序

javascript - 如何在 Node.js Nginx 中允许 http 请求?