上传到Amazon S3的小于5GB的文件有一个ETag,它只是文件的MD5哈希,这使您可以轻松检查本地文件是否与您在S3上的文件相同.
但是如果你的文件大于5GB,那么亚马逊会以不同的方式计算ETag.
例如,我在380个零件中进行了5,970,150,664字节文件的分段上传.现在S3显示它有一个ETag 6bcf86bed8807b8e78f0fc6e0a53079d-380.我的本地文件有一个md5哈希值702242d3703818ddefe6bf7da2bed757.我认为短划线后面的数字是分段上传中的部件数量.
我还怀疑新的ETag(在破折号之前)仍然是MD5哈希,但是在某种程度上从分段上传中包含了一些元数据.
有谁知道如何使用与Amazon S3相同的算法计算ETag?
我已经使用Amazon S3进行一段时间的备份了.通常,在我上传文件后,我会检查MD5总和匹配,以确保我做了一个很好的备份.S3有"etag"标题用于给出这个总和.
但是,当我最近上传一个大文件时,Etag似乎不再是md5总和.它有额外的数字和连字符"696df35ad1161afbeb6ea667e5dd5dab-2861".我找不到任何关于这种变化的文件.我已经使用S3管理控制台和Cyberduck进行了检查.
我找不到有关此更改的任何文档.有什么指针吗?
我尝试验证上传到存储桶的文件的完整性,但我没有找到任何相关信息.
在文件的标题中,有一个"E-tag",但我认为它不是md5校验和.
那么,我如何检查我在Amazon S3上上传的文件是否与我在计算机上的文件相同?
谢谢.:)
我想使用 Sha256 作为我的对象的校验和。但看起来亚马逊在 ETag 中使用了 md5。
有什么解决方法吗?
如果我使用aws-cli(即使用aws s3 cp)将数据上传到S3 ,aws-cli是否会做任何工作来确认S3中的结果文件是否与原始文件匹配,或者我是否需要自己管理?
根据这个答案和putObject()的Java API文档,看起来可以在上传后验证MD5校验和.但是,我无法找到关于aws-cli是否真的这样做的明确答案.
这对我来说很重要,因为我打算从备份过程中上传GPG加密的文件,我想确信存储在S3中的内容实际上与原始文件匹配.
我是 node.js 的新手,我正在尝试编写一个 AWS lambda 函数,该函数将 s3 对象的内容流式传输到节点的加密模块中,以创建 s3 对象的 md5 校验和值。不知道为什么,但每次我运行代码时,它都会在 console.log 上生成不同的哈希值。谁能指出我正确的方向来修复我的代码?感谢您的帮助!
var crypto = require('crypto');
var fs = require('fs');
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = (event, context, callback) => {
var params = {
Bucket: 'bucket_name',
Key: 'key',
};
var hash = crypto.createHash('md5');
var stream = s3.getObject(params, function(err, data) {
if (err){
console.log(err);
return;
}
}).createReadStream();
stream.on('data', function (data) {
hash.update(data, 'utf-8')
})
stream.on('end', function () {
console.log(hash.digest('hex'))
})
};
Run Code Online (Sandbox Code Playgroud)