Azure SDK – NodeJS – 重新上传blob时MD5散列值无效

我正在编写一个使用NodeJS Azure SDK的脚本来下载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哈希是正确的。

我的问题是2部分:

  1. 如果我在传递从Azure接收到的值时,MD5哈希如何不正确?
  2. Azure如何计算他们的MD5哈希? 我无法重新计算哈希值,因为他们正在对MD5哈希进行一些其他的encryption/操作以将其放在不同的格式中,而我也找不到有关如何对MD5哈希进行编码的文档。 这里是一个来自Azure的“MD5”哈希示例,显然不是MD5格式的:

    8kz7pLKnPFlF5G6gy + 0rrg ==

谢谢。

您在项目中使用的Azure-storage-node模块的版本,根据https://github.com/Azure/azure-storage-node/issues/78上的GitHub上的问题,如果sdk版本是在0.6.0以下,你可以先检查sdk的版本。

我们可以在GitHub仓库中findcalculateMD5函数 。 这表明它将利用blob文件的内容在md5创build哈希对象,并以base64作为contentMD5返回值进行编码。

因此,根据Azure blob storage sdk中计算MD5密钥的方法,您可以检查本地file upload到Azure存储的文件是否与存储下载文件相同。

我使用Windows下的NodeJS 5.4.1的Azure SDKtesting了您的代码。 它运作良好。 MD5问题没有出现。 我认为最好更改一个新版本的NodeJs Server。 以下是Node.js服务器的一些链接:

Windows安装: http : //go.microsoft.com/fwlink/?linkid=254279&clcid=0x804

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

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