以前写过一篇 前端使用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
值。运行该程序,查看控制台:api
即为该文件的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
值。运行该程序,查看控制台:
和前面同步读取直接读取文件计算出的 MD5
值同样。ui
当在开发过程当中若是须要计算文件的 MD5
值时,可根据文件大小选择以上两种方法中的某一个进行使用便可。编码
相关文章:
前端使用js计算文件的MD5值spa