博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用spark-md5获取文件的MD5值
阅读量:688 次
发布时间:2019-03-15

本文共 1860 字,大约阅读时间需要 6 分钟。

初始化资源

npm install --save spark-md5
let SparkMD5 = require('spark-md5')

1.一般文件

一种是用SparkMD5.hashBinary() 直接将整个文件的二进制码传入,直接返回文件的md5。

2.体积较大的文件

这里采用分片上传的方式:

一般我们做上传的时候推荐使用着一种方式,因为文件的体积不确定,这种方式对于大体积的文件计算更加稳定,还可以获得计算进度的信息。

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/

你可能感兴趣的文章