此处我们需要用到一个spark-md5的js库类
把他安装到我们项目中: npm install spark-md5 --save
以下为我根据官方demo,改编成一个公用函数,并放到项目的crypto.util.js的文件,用来统一存放项目中需要用到的加密解密的方法
import SparkMD5 from 'spark-md5'
/**
* 使用 spark-md5 生成文件MD5摘要
* @resolve {string} md5
*/
export async function MD5(file) {
return new Promise((resolve, reject) => {
const blobSlice =
File.prototype.slice ||
File.prototype.mozSlice ||
File.prototype.webkitSlice
const chunkSize = 2097152 // Read in chunks of 2MB
const chunks = Math.ceil(file.size / chunkSize)
const spark = new SparkMD5.ArrayBuffer()
const fileReader = new FileReader()
let currentChunk = 0
fileReader.onload = function(e) {
spark.append(e.target.result) // Append array buffer
currentChunk++
if (currentChunk < chunks) {
loadNext()
} else {
resolve(spark.end())
}
}
fileReader.onerror = function(e) {
reject(e)
}
function loadNext() {
const start = currentChunk * chunkSize
const end = start + chunkSize >= file.size ? file.size : start + chunkSize
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
}
loadNext()
})
}
使用的时候,只需要引入该方法,即:
import { MD5 } from '~/plugins/utils/crypto.util.js'
const md5 = await MD5(file)