以前寫過一篇 前端使用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