Node.js计算文件的MD5值

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

引入依赖项前端

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

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

计算小文件的MD5值segmentfault

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.pngapi

即为该文件的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 值同样。ui

当在开发过程当中若是须要计算文件的 MD5 值时,可根据文件大小选择以上两种方法中的某一个进行使用便可。编码

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

相关文章
相关标签/搜索