最近在做一個文件上傳的項目,當上傳文件達到幾十GB,幾百GB后在文件上傳99%后,需要等待非常長的時間文件才能完成上傳。通過埋點打印時間,發現md5計算時間非常長。
為了校驗文件傳輸的完整性需要在文件上傳結束后校驗文件的完整性,md5值就用來校驗完整性,所以這一步不能少。
解決方案
通過網上查找資料,MD5計算工具在計算大文件md5值時也不是一次性計算出來的,也是通過分片的方式累加計算出來的。
所以我們在上傳大文件時,本來上傳的思路就是分片上傳,我們只需要對每塊分片進行md5計算,最后累加計算md5值即可。
通過網上google發現了一篇介紹node通過crypto加密模塊實現md5加密的方法,里面的介紹很詳細,里面介紹了最快速計算md5的方法:
require('crypto').createHash('md5').update(data).digest('hex')
update中傳入每片數據的二進制流。通過測試發現每塊分片計算的md5時間為20多毫秒,速度提升了幾十倍。
