上传文件用MD5加密

内容分享2周前发布
0 0 0

1、安装spark-md5包

npm install spark-md5

2、新建文件md5WithChunk.js,封装md5加密文件的方法

/**
 * 分片获取md5值
 * @param {*} file 文件对象
 * @param {*} processCallback 进度修改回调
 * @param {Number} chunkSize 分片大小, 默认2M
 * @returns {string} md5
 */
export const md5WithChunk = (file, processCallback = console.log, chunkSize = 2 * 1024 ** 2) => {
  return new Promise((resolve, reject) => {
    const blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
    let chunks = Math.ceil(file.size / chunkSize)
    let currentChunk = 0
    let spark = new SparkMD5.ArrayBuffer()
    let fileReader = new FileReader()
    fileReader.onerror = reject
    fileReader.onload = (e) => {
      processCallback(parseInt(currentChunk / chunks * 100))
      spark.append(e.target.result)
      currentChunk++
      if (currentChunk < chunks) {
        loadNext()
      } else {
        processCallback(parseInt(currentChunk / chunks * 100))
        resolve(spark.end())
      }
    }
    function loadNext() {
      let start = currentChunk * chunkSize
      let end = start + chunkSize >= file.size ? file.size : start + chunkSize
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
    }
    loadNext()
  })
}

3、调用计算文件md5的方法,得到md5处理后的文件

const getMd5File = ({file}) => {
const fileMd5 = await md5WithChunk(file, (process) => {
    upFile.md5Process = process
  })
}

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...