之前写过一篇 前端使用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
值。运行该程序,查看控制台:
即为该文件的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
值一样。
当在开发过程中如果需要计算文件的 MD5
值时,可根据文件大小选择以上两种方法中的某一个进行使用即可。
相关文章:
前端使用js计算文件的MD5值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。