计算文件MD5和SHA1

6 篇文章 0 订阅

一、文件md5计算:

参考:https://github.com/forsigner/browser-md5-file

1、引入 spark-md5

npm install --save spark-md5

2、创建 md5.js

import SparkMD5 from 'spark-md5'

export default class BMF {
  md5(file, md5Fn, progressFn) {
    this.aborted = false
    this.progress = 0
    let currentChunk = 0
    const blobSlice =
      File.prototype.slice ||
      File.prototype.mozSlice ||
      File.prototype.webkitSlice
    const chunkSize = 2097152
    const chunks = Math.ceil(file.size / chunkSize)
    const spark = new SparkMD5.ArrayBuffer()
    const reader = new FileReader()

    loadNext()

    reader.onloadend = e => {
      spark.append(e.target.result) // Append array buffer
      currentChunk++
      this.progress = currentChunk / chunks

      if (progressFn && typeof progressFn === 'function') {
        progressFn(this.progress)
      }

      if (this.aborted) {
        md5Fn('aborted')
        return
      }

      if (currentChunk < chunks) {
        loadNext()
      } else {
        md5Fn(null, spark.end())
      }
    }

    /
    function loadNext() {
      const start = currentChunk * chunkSize
      const end = start + chunkSize >= file.size ? file.size : start + chunkSize
      reader.readAsArrayBuffer(blobSlice.call(file, start, end))
    }
  }

  abort() {
    this.aborted = true
  }
}

3、使用

import BMF from '@trantor/share/utils/md5';

const bmf = new BMF();

calMD5(file) {
  return new Promise((resolve, reject) => {
    bmf.md5(this._file, (err, md5) => {
      if (err) {
        reject(err);
      } else {
        resolve(md5);
      }
    });
  });
}

const fileMd5 = await calMD5(file);
console.log('文件md5', fileMd5);

二、文件sha1计算:

sha1的计算方法:先初始化,然后读取数据,不停的update,最后所有数据都计算完,final一下,得到最终结果

对于大文件,其实计算的还是整个文件所有数据的sha1,只是因为文件太大,肯定不能一口气把整个文件读取到内存里直接计算,是一边读一边算,最终得到的结果还是整个文件的sha1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值