本文共 1860 字,大约阅读时间需要 6 分钟。
npm install --save spark-md5
let SparkMD5 = require('spark-md5')
一种是用SparkMD5.hashBinary() 直接将整个文件的二进制码传入,直接返回文件的md5。
一般我们做上传的时候推荐使用着一种方式,因为文件的体积不确定,这种方式对于大体积的文件计算更加稳定,还可以获得计算进度的信息。
function md5(file, chunkSize) { let _this = this return new Promise((resolve, reject) => { let 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.onload = function (e) { spark.append(e.target.result); currentChunk++; _this.md5Obj.percent = Math.floor((currentChunk / chunks) * 100); _this.container.file.MD5Progress = _this.md5Obj.percent if (_this.onMD5Progress(_this.container.file) === false) return; if (currentChunk < chunks) { loadNext(); } else { _this.md5Obj.md5 = spark.end(); //完成md5的计算,返回十六进制结果。 resolve(_this.md5Obj); } }; fileReader.onerror = function (e) { reject(e); }; function loadNext() { let start = currentChunk * chunkSize; let end = start + chunkSize; (end > file.size) && (end = file.size); fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } loadNext(); }); }
调用:
md5.call(this, file, this.chunkSize) .then(res => { // 获取到文件的md5 setDatas.call(this, 'params.md5', res.md5); if (this.autoUpload) { if (this.onStartUpload(this.container.file) === false) return; handleUpload.call(this); } }) .catch(res => { // 处理异常 console.error(res); });//
转载地址:http://ugfmz.baihongyu.com/