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部分:
- 如果我在传递从Azure接收到的值时,MD5哈希如何不正确?
-
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