From 452b534945ec66e5573fd8825760fd1d5f3d999b Mon Sep 17 00:00:00 2001 From: zyx0814 Date: Fri, 21 Jun 2024 14:41:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8A=E4=BC=A0=E5=A4=A7?= =?UTF-8?q?=E6=96=87=E4=BB=B6(=E5=A4=A7=E4=BA=8E2G)=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pc/components/index/upload.htm | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/dzz/pichome/template/librarylist/pc/components/index/upload.htm b/dzz/pichome/template/librarylist/pc/components/index/upload.htm index 5e86c80..b52c295 100644 --- a/dzz/pichome/template/librarylist/pc/components/index/upload.htm +++ b/dzz/pichome/template/librarylist/pc/components/index/upload.htm @@ -305,13 +305,10 @@ }); if(item){ if(!item['md5']){ - let buffer = await this.fileToBuffer(item.raw) - // 根据文件内容生成 hash 值 - const spark = new SparkMD5.ArrayBuffer() - spark.append(buffer) - item['md5'] = spark.end(); + item['fileStatus'] = 1; + item['md5'] = await this.getSparkMd5(item.raw,item.id); } - item['fileStatus'] = 1; + let param = { md5:item['md5'], appid:this.DocumentAppid, @@ -341,6 +338,7 @@ item['Md5Status'] = 4; } item['fileStatus'] = 2; + item['percentage'] = 0; switch (item.Md5Status){ // case 1: // if(self.UploaderData.FileType==1){ @@ -679,17 +677,40 @@ if(findex>-1) self.UploaderData.fdata.splice(findex,1); },time); }, - fileToBuffer(file) { + + getSparkMd5(file,fileid) { + let self=this; return new Promise((resolve, reject) => { - const fr = new FileReader() - fr.onload = e => { - resolve(e.target.result) + let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, + chunkSize = 20097152, // Read in chunks of 2MB + chunks = Math.ceil(file.size / chunkSize), + currentChunk = 0, + spark = new SparkMD5.ArrayBuffer(), + fileReader = new FileReader(); + let item = self.UploaderData.data[fileid]; + fileReader.onload = function (e) { + spark.append(e.target.result); // Append array buffer + currentChunk++; + if (currentChunk < chunks) { + loadNext(); + if(item) item['percentage']=currentChunk*chunkSize; + } else { + let sparkmd5 = spark.end(); + resolve(sparkmd5); + } + }; + + fileReader.onerror = function () { + reject(new Error('spark md5 error')) + }; + + function loadNext() { + let start = currentChunk * chunkSize, + end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; + fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } - fr.readAsArrayBuffer(file) - fr.onerror = () => { - reject(new Error('转换文件格式发生错误')) - } - }) + loadNext(); + }); }, uploaderdrawerOperation(action,item){ let self=this;