生成文件md5
方法
import SparkMD5 from 'spark-md5'
import { Message } from 'element-ui'
export default function getMd5(file, callback) {
return new Promise((resolve) => {
var blobSlice =
File.prototype.slice ||
File.prototype.mozSlice ||
File.prototype.webkitSlice,
chunkSize = 2097152,
chunks = Math.ceil(file.size / chunkSize),
currentChunk = 0,
spark = new SparkMD5.ArrayBuffer(),
fileReader = new FileReader()
fileReader.onload = function (e) {
console.log('read chunk nr', currentChunk + 1, 'of', chunks)
spark.append(e.target.result)
currentChunk++
callback && callback(currentChunk, chunks)
if (currentChunk < chunks) {
loadNext()
} else {
const res = spark.end()
resolve({ success: true, md5: res })
}
}
fileReader.onerror = function () {
Message.error('文件读取出错!')
resolve({ success: false })
}
function loadNext() {
var start = currentChunk * chunkSize,
end = start + chunkSize >= file.size ? file.size : start + chunkSize
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
}
loadNext()
})
}
使用
const { success, md5 } = await getMd5(file, (now, total) => {
progress = Math.ceil((now / total) * 10)
})