本地使用minio之获取文件hash

122 阅读1分钟

本地部署minio进行文件管理重要的一步便是获取文件hash,方法很多计算标准也很多,但是注意尽量前后端计算一致,这里使用md5

后端node这里提供几个方法,使用crypto库

static getFileHashByBuffer(buffer: Buffer) {
  const hash = crypto.createHash('md5');
  hash.update(buffer);
  return hash.digest('hex');
}

static getFileHashByStream(stream: Stream) {
    return new Promise<string>((resolve, reject) => {
      const hash = crypto.createHash('md5');
      stream.on('data', (data) => {
        hash.update(data);
      });

      stream.on('end', () => {
        const fileHash = hash.digest('hex');
        resolve(fileHash);
      });

      stream.on('error', (error) => {
        reject(error);
      });
    });
  }

前端的话使用crypto-js库,测试过同一文件hash计算是相同的

static getFileHash(file: File | Blob) {
  const { promise, reject, resolve } = TsUtils.getSeparatePromise<string>();

  const reader = new FileReader();

  reader.onload = function (e) {
    const fileContent = e.target.result;
    const hash = crypto.MD5(crypto.lib.WordArray.create(fileContent as any)).toString();
    resolve(hash); 
  };

  reader.onerror = function (e) {
    reject(e.target.error);
  };

  reader.readAsArrayBuffer(file);

  return promise;
}