4

之前写过一篇 前端使用js计算文件的MD5值 文章,这里介绍服务端如何使用 Node.js 计算文件的 MD5值。

引入依赖项

const path = require('path');
const fs = require('fs');
const crypto = require('crypto');

本文使用 crypto 来计算文件的 MD5 值。

计算小文件的MD5值

const buffer = fs.readFileSync(path.join(__dirname, '1.mp4'));
const hash = crypto.createHash('md5');
hash.update(buffer, 'utf8');
const md5 = hash.digest('hex');
console.log(md5);

首先使用 fs 读取文件的同步方法获取文件的二进制数据,再使用 crypto.createHash 方法用于创建 Hash 实例,参数为 md5 ,然后使用 hash.update 方法对文件的二进制生成计算后的哈希,第二个参数为编码格式,这里使用的是 'utf-8',最后调用 hash.digest 生成 MD5 值。运行该程序,查看控制台:
image.png

即为该文件的MD5值。

计算大文件的MD5值
但是假设读取的是一个大文件,受限于服务器性能的原因,MD5 的计算速度就会大幅度降低。这时可以使用获取可读流的方式来读取文件。

const stream = fs.createReadStream(path.join(__dirname, '1.mp4'));
const hash = crypto.createHash('md5');
stream.on('data', chunk => {
  hash.update(chunk, 'utf8');
});
stream.on('end', () => {
  const md5 = hash.digest('hex');
  console.log(md5);
});

首先获取文件的可读流,再使用 crypto.createHash 方法用于创建 Hash 实例,参数为 md5 。然后当流接收到数据时使用 hash.update 方法对文件的二进制生成计算后的哈希,第二个参数为编码格式,这里使用的是 'utf-8' 。最后当流读取完毕后调用 hash.digest 生成 MD5 值。运行该程序,查看控制台:
image.png
和前面同步读取直接读取文件计算出的 MD5 值一样。

当在开发过程中如果需要计算文件的 MD5 值时,可根据文件大小选择以上两种方法中的某一个进行使用即可。

相关文章:
前端使用js计算文件的MD5值


秦老爷子
134 声望13 粉丝