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

时间:2017-04-12 22:25:19

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

我目前正在尝试实施一个系统来验证我上传到S3的文件的完整性。通过AWS SDK for JavaScript,我能够检索远程对象的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(强调我的):

  

要确保数据不会通过网络损坏,请使用   Content-MD5标题。当您使用此标头时,Amazon S3会检查   反对提供的MD5值的对象,如果它们不匹配,   返回错误。 此外,您还可以计算MD5   将对象放入Amazon S3并将返回的ETag与之比较   计算MD5值。

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

谢谢你的时间!

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

1 个答案:

答案 0 :(得分:-1)

键盘和椅子之间存在问题。问题在于实际的文件上传而不是md5总和。