Azure 存储 Node.js SDK - MD5 哈希与本地不同
Posted
技术标签:
【中文标题】Azure 存储 Node.js SDK - MD5 哈希与本地不同【英文标题】:Azure storage Node.js SDK - MD5 hash not the same as local 【发布时间】:2021-08-08 11:11:28 【问题描述】:我确实阅读了 SO 中的其他线程,但没有任何帮助。
blobService.getBlobProperties("qauploads", "brand.gif", function(err, properties, status)
let buff = new Buffer(properties.contentSettings.contentMD5);
let base64data = buff.toString('base64');
console.log("remote " + base64data)
)
fileHash('md5', "temp/brand.gif").then(res =>
console.log("local "+ res)
)
function fileHash(algorithm, path)
return new Promise((resolve, reject) =>
// Algorithm depends on availability of OpenSSL on platform
// Another algorithms: 'sha1', 'md5', 'sha256', 'sha512' ...
let shasum = crypto.createHash(algorithm);
try
let s = fs.ReadStream(path)
s.on('data', function (data)
shasum.update(data)
)
// making digest
s.on('end', function ()
const hash = shasum.digest('hex')
return resolve(hash);
)
catch (error)
return reject('calc fail');
);
输出:
local 8112398e797d24a66e66d149c4962733
remote Z1JJNWpubDlKS1p1WnRGSnhKWW5Ndz09
但它们是完全相同的文件!当我手动下载它并检查它的哈希时,它与本地相同。
我不知道怎么了。
【问题讨论】:
【参考方案1】:请试试这个代码:
function fileHash(algorithm, path)
return new Promise((resolve, reject) =>
// Algorithm depends on availability of OpenSSL on platform
// Another algorithms: 'sha1', 'md5', 'sha256', 'sha512' ...
try
const input = fs.createReadStream(path);
const output = crypto.createHash(algorithm);
output.once('readable', () =>
const md5 = output.read().toString('base64');
resolve(md5);
);
input.pipe(output);
catch (error)
return reject('calc fail');
);
我针对存储帐户中的一个 blob 对其进行了测试,并且两者都匹配。
【讨论】:
遗憾的是它没有,我也尝试过相反的方法(将它们都作为base64,在散列函数和上面提到的行中,仍然不匹配。 更新了我的答案。请尝试一下。 它无需将远程的 md5 字符串解析为 base64 即可工作 我认为您计算 MD5 哈希的方式存在问题。我很高兴听到它运作良好。以上是关于Azure 存储 Node.js SDK - MD5 哈希与本地不同的主要内容,如果未能解决你的问题,请参考以下文章
如何从适用于 Node.js 的 Azure blob v12 SDK 中删除 blob
在 Node.js 中列出来自 Azure Blob 存储和 Readstream 的 Blob
使用 Node.js 服务器为 Next.js 授权 Azure 存储服务 REST API - 从 URL 复制 Blob