node.js - Azure SDK - NodeJS - 重新上传 blob 时 MD5 哈希值无效

标签 node.js azure md5 azure-storage

我正在编写一个脚本,该脚本使用适用于 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 哈希是正确的。

我的问题分为两部分:

  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的版本。

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

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

关于node.js - Azure SDK - NodeJS - 重新上传 blob 时 MD5 哈希值无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135215/

相关文章:

node.js - 要使用新的解析器,请传递选项 { useNewUrlParser : true } to MongoClient. connect

azure - 如何使用自定义策略为 Multi-Tenancy Azure Active Directory 设置直接登录

asp.net - 使用 SignalR 从 Azure 辅助角色向客户端发送消息

javascript - 从服务器端使用 REST API?

node.js - 当使用 PM2 在集群模式下运行 Node.js 应用程序时,如何通过命令行加载环境变量?

java - 如何使用 MD5 哈希在 JSP 和 Javascript 中保护登录密码?

file - 文件 MD5 Hash 代表什么?

javascript - 为什么 javascript 返回另一件事而 php 返回另一件事?

css - Stylus 中@font-face 的正确语法/使用 stylus-font-face npm

php - azure 图像 blob 提示下载选项