Azure SDK - NodeJS - 重新上传 blob 时 MD5 哈希无效



我正在编写一个脚本,该脚本使用 Azure SDK for NodeJS 下载 blob 列表,并将 blob 重新上传到不同的存储容器。

var service = azure.createBlobService();
// download file
service.getBlobToLocalFile(fromContainer, blob, localBlob, function(err, resp){ // resp here contains the MD5 hash
    // re-upload file specifying hash
    service.createBlockBlobFromLocalFile(toContainer, blob, localBlob, {contentMD5: resp.contentMD5}, function(error){}); // error here contains MD5 mis-match error
}); 

某些 blob(并非全部(在上传时抛出错误,指出来自 blob 的 MD5 哈希不正确,即使我从 getBlob 操作传递 MD5 哈希:

Error: The MD5 value specified in the request did not match with the MD5 value calculated by the server.

此错误仅发生在某些 Blob 上。其他 blob 已成功上传,这意味着 MD5 哈希是正确的。

我的问题是两部分:

  1. 如果我在下载 blob 时传递从 Azure 收到的值,MD5 哈希怎么可能不正确?
  2. Azure 如何计算其 MD5 哈希?我无法重新计算哈希,因为他们正在对 MD5 哈希进行其他加密/操作以将其放入不同的格式,并且我找不到有关他们如何编码 MD5 哈希的文档。下面是来自 Azure 的"MD5"哈希示例,显然不是 MD5 格式:

    8kz7pLKnPFlF5G6gy+0rrg==

谢谢。

你在项目中使用了哪个版本的Azure-storage-node模块,根据 GitHub 上的问题 https://github.com/Azure/azure-storage-node/issues/78,如果 SDK 版本低于 0.6.0,可能会出现此问题,您可以先检查 SDK 的版本。

我们可以在 GitHub 存储库上找到calculateMD5函数。这表明它将利用 blob 文件的内容在md5中创建哈希对象,并在 base64 中编码为 contentMD5 的返回值。

因此,根据在 Azure blob 存储 SDK 中计算 MD5 密钥的方法,可以检查将上传到 Azure 存储的本地文件是否与从存储下载的文件相同。

我在Windows下使用Azure SDK for NodeJS 5.4.1测试了您的代码。效果很好。未出现 MD5 问题。我认为最好更改新版本的 NodeJs 服务器。以下是 Node.js Server 的一些链接:

视窗安装:http://go.microsoft.com/fwlink/?linkid=254279&clcid=0x409

Linux 安装:http://go.microsoft.com/fwlink/?linkid=253472&clcid=0x409

苹果安装:http://go.microsoft.com/fwlink/?linkid=253471&clcid=0x409

最新更新