Azure storage Node.js SDK-MD5哈希与本地不相同

Azure storage Node.js SDK-MD5哈希与本地不相同,node.js,azure-storage,Node.js,Azure Storage,我确实读了SO中的其他线程,但没有一个有用 blobService.getBlobProperties("qauploads", "brand.gif", function(err, properties, status) { let buff = new Buffer(properties.contentSettings.contentMD5); let base64data = buff.toString('base64'); conso

我确实读了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
但它们是完全相同的文件!当我手动下载它并检查它的散列时,它和本地的一样

我不知道怎么了。

请尝试以下代码:

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哈希的方式存在问题。我很高兴听到它工作良好。