本地部署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;
}