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

相關文章
相關標籤/搜索